packages feed

neko-obfs-0.1.0.0: src/Helper.hs

{-# LANGUAGE OverloadedStrings #-}

-- |

module Helper where

import           Control.Lens
import           Prelude hiding ((-), log)

import           Control.Concurrent.MVar (withMVar)
import           Control.Monad (forever, when)
import           Control.Monad.IO.Class (MonadIO(..))
import           Data.ByteString (ByteString)
import qualified Data.ByteString as B
import           Data.Monoid ((<>))
import           Data.Text (Text)
import qualified Data.Text.IO as T
import           Data.Text.Strict.Lens
import           Pipes (Pipe, for, cat, yield)
import           Pipes.Safe (catchP)

import           Unsafe (logLock)

{-# INLINE (-) #-}
infixr 0 -
(-) :: (a -> b) -> a -> b
f - x = f x

sync :: MonadIO m => IO a -> m a
sync io = liftIO - withMVar logLock - const io

log :: MonadIO m => Text -> m ()
log x = sync - T.putStrLn x