iteratee 0.8.4.6 → 0.8.5.0
raw patch · 8 files changed
+93/−107 lines, 8 filesdep +MonadCatchIO-transformersdep −exceptionsdep −iterateedep ~ListLikedep ~basedep ~bytestringnew-component:exe:testIterateePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: MonadCatchIO-transformers
Dependencies removed: exceptions, iteratee
Dependency ranges changed: ListLike, base, bytestring, containers, mtl, parallel, test-framework, test-framework-quickcheck2, transformers
API changes (from Hackage documentation)
- Data.Iteratee.Base: instance (MonadCatch m, Nullable s, NullPoint s) => MonadCatch (Iteratee s m)
- Data.Iteratee.Base: instance (MonadMask m, Nullable s, NullPoint s) => MonadMask (Iteratee s m)
- Data.Iteratee.Base: instance (MonadThrow m, Nullable s, NullPoint s) => MonadThrow (Iteratee s m)
+ Data.Iteratee.Base: instance (MonadCatchIO m, Nullable s, NullPoint s) => MonadCatchIO (Iteratee s m)
- Data.Iteratee: fileDriver :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a
+ Data.Iteratee: fileDriver :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a
- Data.Iteratee: fileDriverRandom :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a
+ Data.Iteratee: fileDriverRandom :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a
- Data.Iteratee: fileDriverRandomVBuf :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
+ Data.Iteratee: fileDriverRandomVBuf :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
- Data.Iteratee: fileDriverVBuf :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
+ Data.Iteratee: fileDriverVBuf :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
- Data.Iteratee.Exception: class Exception e => IException e where toIterException = IterException fromIterException = fromException . toException
+ Data.Iteratee.Exception: class Exception e => IException e
- Data.Iteratee.IO: enumFd :: (NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) => Int -> Fd -> Enumerator s m a
+ Data.Iteratee.IO: enumFd :: (NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -> Fd -> Enumerator s m a
- Data.Iteratee.IO: enumFdRandom :: (NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) => Int -> Fd -> Enumerator s m a
+ Data.Iteratee.IO: enumFdRandom :: (NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -> Fd -> Enumerator s m a
- Data.Iteratee.IO: enumFile :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a
+ Data.Iteratee.IO: enumFile :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a
- Data.Iteratee.IO: enumFileRandom :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a
+ Data.Iteratee.IO: enumFileRandom :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a
- Data.Iteratee.IO: enumHandle :: (NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) => Int -> Handle -> Enumerator s m a
+ Data.Iteratee.IO: enumHandle :: (NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -> Handle -> Enumerator s m a
- Data.Iteratee.IO: enumHandleRandom :: (NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) => Int -> Handle -> Enumerator s m a
+ Data.Iteratee.IO: enumHandleRandom :: (NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -> Handle -> Enumerator s m a
- Data.Iteratee.IO: fileDriver :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a
+ Data.Iteratee.IO: fileDriver :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a
- Data.Iteratee.IO: fileDriverRandom :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a
+ Data.Iteratee.IO: fileDriverRandom :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a
- Data.Iteratee.IO: fileDriverRandomVBuf :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
+ Data.Iteratee.IO: fileDriverRandomVBuf :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
- Data.Iteratee.IO: fileDriverVBuf :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
+ Data.Iteratee.IO: fileDriverVBuf :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
- Data.Iteratee.IO.Fd: enumFd :: (NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) => Int -> Fd -> Enumerator s m a
+ Data.Iteratee.IO.Fd: enumFd :: (NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -> Fd -> Enumerator s m a
- Data.Iteratee.IO.Fd: enumFdCatch :: (IException e, NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) => Int -> Fd -> (e -> m (Maybe EnumException)) -> Enumerator s m a
+ Data.Iteratee.IO.Fd: enumFdCatch :: (IException e, NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -> Fd -> (e -> m (Maybe EnumException)) -> Enumerator s m a
- Data.Iteratee.IO.Fd: enumFdRandom :: (NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) => Int -> Fd -> Enumerator s m a
+ Data.Iteratee.IO.Fd: enumFdRandom :: (NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -> Fd -> Enumerator s m a
- Data.Iteratee.IO.Fd: enumFile :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a
+ Data.Iteratee.IO.Fd: enumFile :: (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a
- Data.Iteratee.IO.Fd: enumFileRandom :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a
+ Data.Iteratee.IO.Fd: enumFileRandom :: (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a
- Data.Iteratee.IO.Fd: fileDriverFd :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
+ Data.Iteratee.IO.Fd: fileDriverFd :: (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
- Data.Iteratee.IO.Fd: fileDriverRandomFd :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
+ Data.Iteratee.IO.Fd: fileDriverRandomFd :: (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
- Data.Iteratee.IO.Handle: enumFile :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a
+ Data.Iteratee.IO.Handle: enumFile :: (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a
- Data.Iteratee.IO.Handle: enumFileRandom :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a
+ Data.Iteratee.IO.Handle: enumFileRandom :: (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a
- Data.Iteratee.IO.Handle: enumHandle :: (NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) => Int -> Handle -> Enumerator s m a
+ Data.Iteratee.IO.Handle: enumHandle :: (NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -> Handle -> Enumerator s m a
- Data.Iteratee.IO.Handle: enumHandleCatch :: (IException e, NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) => Int -> Handle -> (e -> m (Maybe EnumException)) -> Enumerator s m a
+ Data.Iteratee.IO.Handle: enumHandleCatch :: (IException e, NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -> Handle -> (e -> m (Maybe EnumException)) -> Enumerator s m a
- Data.Iteratee.IO.Handle: enumHandleRandom :: (NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) => Int -> Handle -> Enumerator s m a
+ Data.Iteratee.IO.Handle: enumHandleRandom :: (NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -> Handle -> Enumerator s m a
- Data.Iteratee.IO.Handle: fileDriverHandle :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
+ Data.Iteratee.IO.Handle: fileDriverHandle :: (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
- Data.Iteratee.IO.Handle: fileDriverRandomHandle :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
+ Data.Iteratee.IO.Handle: fileDriverRandomHandle :: (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a
- Data.Iteratee.Iteratee: enumChunk :: Monad m => Stream s -> Enumerator s m a
+ Data.Iteratee.Iteratee: enumChunk :: (Monad m, Monoid s) => Stream s -> Enumerator s m a
- Data.Iteratee.Iteratee: enumPure1Chunk :: Monad m => s -> Enumerator s m a
+ Data.Iteratee.Iteratee: enumPure1Chunk :: (Monad m, Monoid s) => s -> Enumerator s m a
- Data.Iteratee.Iteratee: type Enumeratee sFrom sTo (m :: * -> *) a = Iteratee sTo m a -> Iteratee sFrom m (Iteratee sTo m a)
+ Data.Iteratee.Iteratee: type Enumeratee sFrom sTo m :: (* -> *) a = Iteratee sTo m a -> Iteratee sFrom m (Iteratee sTo m a)
Files
- iteratee.cabal +36/−31
- src/Data/Iteratee/Base.hs +9/−18
- src/Data/Iteratee/IO.hs +13/−20
- src/Data/Iteratee/IO/Fd.hs +10/−17
- src/Data/Iteratee/IO/Handle.hs +10/−16
- src/Data/Iteratee/Iteratee.hs +4/−3
- src/Data/Iteratee/ListLike.hs +3/−1
- tests/testIteratee.hs +8/−1
iteratee.cabal view
@@ -1,5 +1,5 @@ name: iteratee-version: 0.8.4.6+version: 0.8.5.0 synopsis: Iteratee-based I/O description: The Iteratee monad provides strict, safe, and functional I/O. In addition@@ -12,10 +12,10 @@ license: BSD3 license-file: LICENSE homepage: http://www.tiresiaspress.us/haskell/iteratee-tested-with: GHC == 7.4.2, GHC == 7.6.0+tested-with: GHC == 7.0.3, GHC == 6.12.3 stability: experimental -cabal-version: >= 1.16+cabal-version: >= 1.6 build-type: Simple extra-source-files:@@ -26,13 +26,23 @@ Examples/*.txt tests/*.hs +flag splitBase+ description: Use the split-up base package.++flag buildTests+ description: Build test executables.+ default: False+ library- default-language: Haskell2010 hs-source-dirs: src - build-depends:+ if flag(splitBase)+ build-depends: base >= 3 && < 6+ else+ build-depends:+ base < 3 if os(windows) cpp-options: -DUSE_WINDOWS@@ -47,12 +57,12 @@ unix >= 2 && < 3 build-depends:- ListLike >= 1.0 && < 5,- bytestring >= 0.9 && < 0.11,- containers >= 0.2 && < 0.6,- exceptions >= 0.5 && < 0.7,+ ListLike >= 1.0 && < 4,+ MonadCatchIO-transformers > 0.2 && < 0.3,+ bytestring >= 0.9 && < 0.10,+ containers >= 0.2 && < 0.5, parallel >= 2 && < 4,- transformers >= 0.2 && < 0.5+ transformers >= 0.2 && < 0.3 exposed-modules: Data.Nullable@@ -77,36 +87,31 @@ if impl(ghc >= 6.8) ghc-options: -fwarn-tabs -Test-Suite testIteratee- default-language: Haskell2010- type: exitcode-stdio-1.0- main-is: testIteratee.hs+executable testIteratee hs-source-dirs: src tests + main-is: testIteratee.hs+ other-modules: QCUtils - if os(windows)- cpp-options: -DUSE_WINDOWS- else- cpp-options: -DUSE_POSIX+ if flag(buildTests) build-depends:- unix >= 2 && < 3-- build-depends:- base,- bytestring,- exceptions,- iteratee,- ListLike,- parallel,- transformers,- mtl >= 2 && < 4,+ mtl >= 2 && < 3, QuickCheck >= 2 && < 3,- test-framework >= 0.3 && < 0.9,- test-framework-quickcheck2 >= 0.2 && < 0.5+ test-framework >= 0.3 && < 0.4,+ test-framework-quickcheck2 >= 0.2 && < 0.3+ else+ buildable: False++ if flag(splitBase)+ build-depends:+ base >= 3 && < 5+ else+ build-depends:+ base < 3 source-repository head type: darcs
src/Data/Iteratee/Base.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE TypeFamilies, FlexibleContexts, FlexibleInstances, Rank2Types, DeriveDataTypeable, ExistentialQuantification #-} @@ -34,17 +33,19 @@ ) where -import Prelude hiding (null)+import Prelude hiding (null, catch) import Data.Iteratee.Base.LooseMap import Data.Iteratee.Exception import Data.Nullable import Data.NullPoint import Data.Monoid -import Control.Monad.Catch as CIO import Control.Monad.IO.Class import Control.Monad.Trans.Class+import Control.Monad.CatchIO (MonadCatchIO (..), Exception (..),+ catch, block, toException, fromException) import Control.Applicative hiding (empty)+import Control.Exception (SomeException) import qualified Control.Exception as E import Data.Data @@ -162,21 +163,11 @@ instance (MonadIO m, Nullable s, NullPoint s) => MonadIO (Iteratee s m) where liftIO = lift . liftIO -instance (MonadThrow m, Nullable s, NullPoint s) =>- MonadThrow (Iteratee s m) where- throwM e = lift $ CIO.throwM e--instance (MonadCatch m, Nullable s, NullPoint s) =>- MonadCatch (Iteratee s m) where- m `catch` f = Iteratee $ \od oc -> runIter m od oc `CIO.catch` (\e -> runIter (f e) od oc)---- prior to exceptions-0.6, these were part of MonadCatch-#if MIN_VERSION_exceptions(0,6,0)-instance (MonadMask m, Nullable s, NullPoint s) =>- MonadMask (Iteratee s m) where-#endif- mask q = Iteratee $ \od oc -> CIO.mask $ \u -> runIter (q $ ilift u) od oc- uninterruptibleMask q = Iteratee $ \od oc -> CIO.uninterruptibleMask $ \u -> runIter (q $ ilift u) od oc+instance (MonadCatchIO m, Nullable s, NullPoint s) =>+ MonadCatchIO (Iteratee s m) where+ m `catch` f = Iteratee $ \od oc -> runIter m od oc `catch` (\e -> runIter (f e) od oc)+ block = ilift block+ unblock = ilift unblock -- |Send 'EOF' to the @Iteratee@ and disregard the unconsumed part of the -- stream. If the iteratee is in an exception state, that exception is
src/Data/Iteratee/IO.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE CPP #-}-{-# LANGUAGE ConstraintKinds #-} -- |Random and Binary IO with generic Iteratees. @@ -38,13 +37,7 @@ import qualified Data.Iteratee.IO.Fd as FD #endif -import Control.Monad.Catch-import Control.Monad.IO.Class--#if MIN_VERSION_exceptions(0,6,0)-#else-type MonadMask = MonadCatch-#endif+import Control.Monad.CatchIO -- | The default buffer size. defaultBufSize :: Int@@ -54,14 +47,14 @@ #if defined(USE_POSIX) enumFile- :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>+ :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a enumFile = FD.enumFile enumFileRandom- :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>+ :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a@@ -70,7 +63,7 @@ -- |Process a file using the given Iteratee. This function wraps -- enumFd as a convenience. fileDriver- :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>+ :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a@@ -78,7 +71,7 @@ -- |A version of fileDriver with a user-specified buffer size (in elements). fileDriverVBuf- :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>+ :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath@@ -88,14 +81,14 @@ -- |Process a file using the given Iteratee. This function wraps -- enumFdRandom as a convenience. fileDriverRandom- :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>+ :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a fileDriverRandom = FD.fileDriverRandomFd defaultBufSize fileDriverRandomVBuf- :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>+ :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath@@ -110,7 +103,7 @@ -- |Process a file using the given Iteratee. This function wraps -- @enumHandle@ as a convenience. fileDriver ::- (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>+ (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a@@ -118,7 +111,7 @@ -- |A version of fileDriver with a user-specified buffer size (in elements). fileDriverVBuf ::- (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>+ (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath@@ -128,14 +121,14 @@ -- |Process a file using the given Iteratee. This function wraps -- @enumRandomHandle@ as a convenience. fileDriverRandom- :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>+ :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a fileDriverRandom = H.fileDriverRandomHandle defaultBufSize fileDriverRandomVBuf- :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>+ :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath@@ -143,14 +136,14 @@ fileDriverRandomVBuf = H.fileDriverRandomHandle enumFile- :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>+ :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a enumFile = H.enumFile enumFileRandom- :: (MonadIO m, MonadMask m, NullPoint s, ReadableChunk s el) =>+ :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> FilePath -> Enumerator s m a
src/Data/Iteratee/IO/Fd.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE CPP, ScopedTypeVariables #-}-{-# LANGUAGE ConstraintKinds #-} -- |Random and Binary IO with generic Iteratees, using File Descriptors for IO. -- when available, these are the preferred functions for performing IO as they@@ -31,7 +30,7 @@ import Control.Concurrent (yield) import Control.Exception import Control.Monad-import Control.Monad.Catch as CIO+import Control.Monad.CatchIO as CIO import Control.Monad.IO.Class import Foreign.Ptr@@ -42,12 +41,6 @@ import System.Posix hiding (FileOffset) -#if MIN_VERSION_exceptions(0,6,0)-#else-type MonadMask = MonadCatch-#endif-- -- ------------------------------------------------------------------------ -- Binary Random IO enumerators @@ -70,7 +63,7 @@ -- over the entire contents of a file, in order, unless stopped by -- the iteratee. In particular, seeking is not supported. enumFd- :: forall s el m a.(NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) =>+ :: forall s el m a.(NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -> Fd -> Enumerator s m a@@ -82,7 +75,7 @@ -- |A variant of enumFd that catches exceptions raised by the @Iteratee@. enumFdCatch- :: forall e s el m a.(IException e, NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m)+ :: forall e s el m a.(IException e, NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -> Fd -> (e -> m (Maybe EnumException))@@ -97,7 +90,7 @@ -- |The enumerator of a POSIX File Descriptor: a variation of @enumFd@ that -- supports RandomIO (seek requests). enumFdRandom- :: forall s el m a.(NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) =>+ :: forall s el m a.(NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -> Fd -> Enumerator s m a@@ -110,7 +103,7 @@ . liftIO . myfdSeek fd AbsoluteSeek $ fromIntegral off fileDriver- :: (MonadIO m, MonadMask m, ReadableChunk s el) =>+ :: (MonadCatchIO m, ReadableChunk s el) => (Int -> Fd -> Enumerator s m a) -> Int -> Iteratee s m a@@ -123,7 +116,7 @@ -- |Process a file using the given @Iteratee@. fileDriverFd- :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) =>+ :: (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -- ^Buffer size (number of elements) -> Iteratee s m a -> FilePath@@ -132,14 +125,14 @@ -- |A version of fileDriverFd that supports seeking. fileDriverRandomFd- :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) =>+ :: (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a fileDriverRandomFd = fileDriver enumFdRandom -enumFile' :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) =>+enumFile' :: (NullPoint s, MonadCatchIO m, ReadableChunk s el) => (Int -> Fd -> Enumerator s m a) -> Int -- ^Buffer size -> FilePath@@ -150,14 +143,14 @@ (flip (enumf bufsize) iter) enumFile ::- (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el)+ (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -- ^Buffer size -> FilePath -> Enumerator s m a enumFile = enumFile' enumFd enumFileRandom ::- (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el)+ (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -- ^Buffer size -> FilePath -> Enumerator s m a
src/Data/Iteratee/IO/Handle.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE ScopedTypeVariables #-} -- |Random and Binary IO with generic Iteratees. These functions use Handles@@ -27,7 +25,7 @@ import Control.Exception import Control.Monad-import Control.Monad.Catch as CIO+import Control.Monad.CatchIO as CIO import Control.Monad.IO.Class import Foreign.Ptr@@ -36,16 +34,12 @@ import System.IO -#if MIN_VERSION_exceptions(0,6,0)-#else-type MonadMask = MonadCatch-#endif -- ------------------------------------------------------------------------ -- Binary Random IO enumerators makeHandleCallback ::- (MonadIO m, MonadCatch m, NullPoint s, ReadableChunk s el) =>+ (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Ptr el -> Int -> Handle@@ -65,7 +59,7 @@ -- the iteratee. In particular, seeking is not supported. -- Data is read into a buffer of the specified size. enumHandle ::- forall s el m a.(NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) =>+ forall s el m a.(NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -- ^Buffer size (number of elements per read) -> Handle -> Enumerator s m a@@ -82,7 +76,7 @@ forall e s el m a.(IException e, NullPoint s, ReadableChunk s el,- MonadIO m, MonadMask m) =>+ MonadCatchIO m) => Int -- ^Buffer size (number of elements per read) -> Handle -> (e -> m (Maybe EnumException))@@ -98,7 +92,7 @@ -- supports RandomIO (seek requests). -- Data is read into a buffer of the specified size. enumHandleRandom ::- forall s el m a.(NullPoint s, ReadableChunk s el, MonadIO m, MonadMask m) =>+ forall s el m a.(NullPoint s, ReadableChunk s el, MonadCatchIO m) => Int -- ^ Buffer size (number of elements per read) -> Handle -> Enumerator s m a@@ -113,7 +107,7 @@ -- ---------------------------------------------- -- File Driver wrapper functions. -enumFile' :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) =>+enumFile' :: (NullPoint s, MonadCatchIO m, ReadableChunk s el) => (Int -> Handle -> Enumerator s m a) -> Int -- ^Buffer size -> FilePath@@ -124,14 +118,14 @@ (flip (enumf bufsize) iter) enumFile ::- (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el)+ (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -- ^Buffer size -> FilePath -> Enumerator s m a enumFile = enumFile' enumHandle enumFileRandom ::- (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el)+ (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -- ^Buffer size -> FilePath -> Enumerator s m a@@ -140,7 +134,7 @@ -- |Process a file using the given @Iteratee@. This function wraps -- @enumHandle@ as a convenience. fileDriverHandle- :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) =>+ :: (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -- ^Buffer size (number of elements) -> Iteratee s m a -> FilePath@@ -150,7 +144,7 @@ -- |A version of @fileDriverHandle@ that supports seeking. fileDriverRandomHandle- :: (NullPoint s, MonadIO m, MonadMask m, ReadableChunk s el) =>+ :: (NullPoint s, MonadCatchIO m, ReadableChunk s el) => Int -- ^ Buffer size (number of elements) -> Iteratee s m a -> FilePath
src/Data/Iteratee/Iteratee.hs view
@@ -325,7 +325,7 @@ -- |Applies the iteratee to the given stream. This wraps 'enumEof', -- 'enumErr', and 'enumPure1Chunk', calling the appropriate enumerator -- based upon 'Stream'.-enumChunk :: (Monad m) => Stream s -> Enumerator s m a+enumChunk :: (Monad m, Monoid s) => Stream s -> Enumerator s m a enumChunk (Chunk xs) = enumPure1Chunk xs enumChunk (EOF Nothing) = enumEof enumChunk (EOF (Just e)) = enumErr e@@ -402,9 +402,10 @@ -- -- It passes a given list of elements to the iteratee in one chunk -- This enumerator does no IO and is useful for testing of base parsing-enumPure1Chunk :: (Monad m) => s -> Enumerator s m a-enumPure1Chunk str iter = runIter iter idoneM onCont+enumPure1Chunk :: (Monad m, Monoid s) => s -> Enumerator s m a+enumPure1Chunk str iter = runIter iter onDone onCont where+ onDone a str' = idoneM a (Chunk str `mappend` str') onCont k Nothing = return $ k $ Chunk str onCont k e = return $ icont k e
src/Data/Iteratee/ListLike.hs view
@@ -221,8 +221,10 @@ roll t d | t > d = liftI step where step (Chunk vec)- | LL.length vec >= t =+ | LL.length vec >= d = idone (LL.singleton $ LL.take t vec) (Chunk $ LL.drop d vec)+ | LL.length vec >= t =+ idone (LL.singleton $ LL.take t vec) mempty <* drop (d-LL.length vec) | LL.null vec = liftI step | otherwise = liftI (step' vec) step stream = idone LL.empty stream
tests/testIteratee.hs view
@@ -153,6 +153,12 @@ type I = Iteratee [Int] Identity [Int] +prop_enumNoStream xs =+ runIdentity (enumPure1Chunk xs (return 'a') >>= \i ->+ Iter.run (i >> stream2list))+ == xs+ where types = xs :: [Int]+ prop_enumChunks n xs i = n > 0 ==> runner1 (enumPure1Chunk xs i) == runner1 (enumSpecial xs n i) where types = (n :: Int, xs :: [Int], i :: I)@@ -376,7 +382,8 @@ ,testProperty "iteratee Monad Assc" prop_iterMonad3 ] ,testGroup "Simple Enumerators/Combinators" [- testProperty "enumPureNChunk" prop_enumChunks+ testProperty "enumPure1Chunk - final stream state" prop_enumNoStream+ ,testProperty "enumPureNChunk" prop_enumChunks ,testProperty "enum append 1" prop_app1 ,testProperty "enum sequencing" prop_app2 ,testProperty "enum sequencing 2" prop_app3