packages feed

http-monad 0.1.0.3 → 0.1.1

raw patch · 3 files changed

+36/−20 lines, 3 filesdep ~lazyio

Dependency ranges changed: lazyio

Files

http-monad.cabal view
@@ -1,5 +1,5 @@ Name:               http-monad-Version:            0.1.0.3+Version:            0.1.1 Cabal-Version:      >= 1.6 Build-type:         Simple License:            BSD3@@ -29,7 +29,7 @@ Source-Repository this   type:     darcs   location: http://code.haskell.org/~thielema/http-monad/-  tag:      0.1.0.3+  tag:      0.1.1  Flag splitBase   description: Old, monolithic base@@ -61,7 +61,7 @@   Build-depends: transformers >=0.2 && <0.4   Build-depends: explicit-exception >=0.1.4 && <0.2   Build-depends: utility-ht >=0.0.4 && <0.1-  Build-depends: lazyio >=0.0.2 && <0.1+  Build-depends: lazyio >=0.1 && <0.2    If flag(splitBase)     Build-depends: base < 3
src/Network/Monad/Transfer.hs view
@@ -42,18 +42,26 @@    }  +liftSync :: Monad m =>+   m (Stream.Result a) -> SyncExceptional m a+liftSync = Sync.fromEitherT++liftAsync :: (Monad m, Monoid a) =>+   m (Stream.Result a) -> AsyncExceptional m a+liftAsync =+   Async.mapExceptionalT unwrapMonad .+   Async.fromSynchronousMonoidT .+   Sync.mapExceptionalT WrapMonad .+   liftSync++ liftIOSync :: MonadIO io =>    IO (Stream.Result a) -> SyncExceptional io a-liftIOSync m =-   Sync.fromEitherT $ liftIO m+liftIOSync = liftSync . liftIO  liftIOAsync :: (MonadIO io, Monoid a) =>    IO (Stream.Result a) -> AsyncExceptional io a-liftIOAsync =-   Async.mapExceptionalT unwrapMonad .-   Async.fromSynchronousMonoidT .-   Sync.mapExceptionalT WrapMonad .-   liftIOSync+liftIOAsync = liftAsync . liftIO {- liftIOAsync =    Async.ExceptionalT .
src/Network/Monad/Transfer/ChunkyLazyIO.hs view
@@ -51,9 +51,12 @@    Transfer.T LazyIO.T body transfer chunkSize h =    Transfer.Cons {-      Transfer.readLine   =         Transfer.liftIOAsync $ TCP.readLine h,-      Transfer.readBlock  = \n   -> readBlockChunky chunkSize h n,-      Transfer.writeBlock = \str -> Transfer.liftIOSync  $ TCP.writeBlock h str+      Transfer.readLine   =+         Transfer.liftAsync $ LazyIO.interleave $ TCP.readLine h,+      Transfer.readBlock  = \n   ->+         readBlockChunky chunkSize h n,+      Transfer.writeBlock = \str ->+         Transfer.liftSync  $ LazyIO.interleave $ TCP.writeBlock h str    }  run :: (TCP.HStream body, Body body) =>@@ -66,15 +69,20 @@   readBlockChunky :: (TCP.HStream body, Body body) =>-   Int -> TCP.HandleStream body -> Int -> Transfer.AsyncExceptional LazyIO.T body+   Int -> TCP.HandleStream body ->+   Int -> Transfer.AsyncExceptional LazyIO.T body readBlockChunky chunkSize h =    let go todo =          if todo>0-           then -- we cannot use 'mappend' because 'length str' is needed-                do (Transfer.liftIOAsync $-                    TCP.readBlock h (min chunkSize todo))-                   `Async.bindT`-                   (\str ->-                       fmap (mappend str) $ go (max 0 (todo - length str)))+           then+              {-+              We must use `bindT` instead of 'mappend'+              because we need 'length str'.+              -}+              (Transfer.liftAsync $ LazyIO.interleave $+               TCP.readBlock h (min chunkSize todo))+              `Async.bindT`+              (\str ->+                  fmap (mappend str) $ go (max 0 (todo - length str)))            else mempty    in  go