module Network.Monad.Transfer.IO where import qualified Network.Monad.Transfer as Transfer import qualified Network.Monad.Reader as Reader import qualified Network.TCP as TCP import Control.Monad.Trans.Reader (ReaderT, runReaderT, ) import Control.Monad.IO.Class (MonadIO, ) import Data.Monoid (Monoid, ) transfer :: (TCP.HStream body, Monoid body, MonadIO io) => TCP.HandleStream body -> Transfer.T io body transfer :: forall body (io :: * -> *). (HStream body, Monoid body, MonadIO io) => HandleStream body -> T io body transfer HandleStream body h = Transfer.Cons { readLine :: AsyncExceptional io body Transfer.readLine = forall (io :: * -> *) a. (MonadIO io, Monoid a) => IO (Result a) -> AsyncExceptional io a Transfer.liftIOAsync forall a b. (a -> b) -> a -> b $ forall bufType. HStream bufType => HandleStream bufType -> IO (Result bufType) TCP.readLine HandleStream body h, readBlock :: Int -> AsyncExceptional io body Transfer.readBlock = \Int n -> forall (io :: * -> *) a. (MonadIO io, Monoid a) => IO (Result a) -> AsyncExceptional io a Transfer.liftIOAsync forall a b. (a -> b) -> a -> b $ forall bufType. HStream bufType => HandleStream bufType -> Int -> IO (Result bufType) TCP.readBlock HandleStream body h Int n, writeBlock :: body -> SyncExceptional io () Transfer.writeBlock = \body str -> forall (io :: * -> *) a. MonadIO io => IO (Result a) -> SyncExceptional io a Transfer.liftIOSync forall a b. (a -> b) -> a -> b $ forall bufType. HStream bufType => HandleStream bufType -> bufType -> IO (Result ()) TCP.writeBlock HandleStream body h body str } run :: (TCP.HStream body, Monoid body, MonadIO io) => Reader.T body io a -> TCP.HandleStream body -> io a run :: forall body (io :: * -> *) a. (HStream body, Monoid body, MonadIO io) => T body io a -> HandleStream body -> io a run T body io a m HandleStream body h = forall r (m :: * -> *) a. ReaderT r m a -> r -> m a runReaderT T body io a m forall a b. (a -> b) -> a -> b $ forall body (io :: * -> *). (HStream body, Monoid body, MonadIO io) => HandleStream body -> T io body transfer HandleStream body h