packages feed

iteratee-mtl 0.4.0.2 → 0.5.0.0

raw patch · 5 files changed

+59/−28 lines, 5 filesdep ~basedep ~containersPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base, containers

API changes (from Hackage documentation)

- Data.Iteratee.Base: instance (Eq c) => Eq (Stream c)
- Data.Iteratee.Base: instance (Monoid c) => Monoid (Stream c)
- Data.Iteratee.Base: instance (NullPoint s) => MonadTrans (Iteratee s)
- Data.Iteratee.Base: instance (Show c) => Show (Stream c)
+ Data.Iteratee.Base: instance Eq c => Eq (Stream c)
+ Data.Iteratee.Base: instance Monoid c => Monoid (Stream c)
+ Data.Iteratee.Base: instance NullPoint s => MonadTrans (Iteratee s)
+ Data.Iteratee.Base: instance Show c => Show (Stream c)
+ Data.Iteratee.ListLike: roll :: (Monad m, Functor m, Nullable s, ListLike s el, ListLike s' s) => Int -> Int -> Iteratee s m s'
- Data.Iteratee.Base: icontM :: (Monad m) => (Stream s -> Iteratee s m a) -> Maybe SomeException -> m (Iteratee s m a)
+ Data.Iteratee.Base: icontM :: Monad m => (Stream s -> Iteratee s m a) -> Maybe SomeException -> m (Iteratee s m a)
- Data.Iteratee.Base: idone :: (Monad m) => a -> Stream s -> Iteratee s m a
+ Data.Iteratee.Base: idone :: Monad m => a -> Stream s -> Iteratee s m a
- Data.Iteratee.Base: idoneM :: (Monad m) => a -> Stream s -> m (Iteratee s m a)
+ Data.Iteratee.Base: idoneM :: Monad m => a -> Stream s -> m (Iteratee s m a)
- Data.Iteratee.Base: liftI :: (Monad m) => (Stream s -> Iteratee s m a) -> Iteratee s m a
+ Data.Iteratee.Base: liftI :: Monad m => (Stream s -> Iteratee s m a) -> Iteratee s m a
- Data.Iteratee.Base: run :: (Monad m) => Iteratee s m a -> m a
+ Data.Iteratee.Base: run :: Monad m => Iteratee s m a -> m a
- Data.Iteratee.Base.LooseMap: lMap :: (LooseMap c el el') => (el -> el') -> c el -> c el'
+ Data.Iteratee.Base.LooseMap: lMap :: LooseMap c el el' => (el -> el') -> c el -> c el'
- Data.Iteratee.Base.ReadableChunk: class (Storable el) => ReadableChunk s el | s -> el
+ Data.Iteratee.Base.ReadableChunk: class Storable el => ReadableChunk s el | s -> el
- Data.Iteratee.Char: enumLinesBS :: (Monad m) => Enumeratee ByteString [ByteString] m a
+ Data.Iteratee.Char: enumLinesBS :: Monad m => Enumeratee ByteString [ByteString] m a
- Data.Iteratee.Char: enumWordsBS :: (Monad m) => Enumeratee ByteString [ByteString] m a
+ Data.Iteratee.Char: enumWordsBS :: Monad m => Enumeratee ByteString [ByteString] m a
- Data.Iteratee.Exception: class (Exception e) => IException e
+ Data.Iteratee.Exception: class Exception e => IException e
- Data.Iteratee.Exception: fromIterException :: (IException e) => IterException -> Maybe e
+ Data.Iteratee.Exception: fromIterException :: IException e => IterException -> Maybe e
- Data.Iteratee.Exception: toIterException :: (IException e) => e -> IterException
+ Data.Iteratee.Exception: toIterException :: IException e => e -> IterException
- Data.Iteratee.Iteratee: (>>>) :: (Monad m) => Enumerator s m a -> Enumerator s m a -> Enumerator s m a
+ Data.Iteratee.Iteratee: (>>>) :: Monad m => Enumerator s m a -> Enumerator s m a -> Enumerator s m a
- Data.Iteratee.Iteratee: enumCheckIfDone :: (Monad m) => Iteratee s m a -> m (Bool, Iteratee s m a)
+ Data.Iteratee.Iteratee: enumCheckIfDone :: Monad m => Iteratee s m a -> m (Bool, Iteratee s m a)
- Data.Iteratee.Iteratee: enumChunk :: (Monad m) => Stream s -> Enumerator s m a
+ Data.Iteratee.Iteratee: enumChunk :: Monad m => Stream s -> Enumerator s m a
- Data.Iteratee.Iteratee: enumEof :: (Monad m) => Enumerator s m a
+ Data.Iteratee.Iteratee: enumEof :: Monad m => Enumerator s m a
- Data.Iteratee.Iteratee: enumFromCallback :: (Monad m, NullPoint s) => m (Either SomeException (Bool, s)) -> Enumerator s m a
+ Data.Iteratee.Iteratee: enumFromCallback :: (Monad m, NullPoint s) => (st -> m (Either SomeException ((Bool, st), s))) -> st -> Enumerator s m a
- Data.Iteratee.Iteratee: enumFromCallbackCatch :: (IException e, Monad m, NullPoint s) => m (Either SomeException (Bool, s)) -> (e -> m (Maybe EnumException)) -> Enumerator s m a
+ Data.Iteratee.Iteratee: enumFromCallbackCatch :: (IException e, Monad m, NullPoint s) => (st -> m (Either SomeException ((Bool, st), s))) -> (e -> m (Maybe EnumException)) -> st -> Enumerator s m a
- Data.Iteratee.Iteratee: enumPure1Chunk :: (Monad m) => s -> Enumerator s m a
+ Data.Iteratee.Iteratee: enumPure1Chunk :: Monad m => s -> Enumerator s m a
- Data.Iteratee.Iteratee: isStreamFinished :: (Monad m) => Iteratee s m (Maybe SomeException)
+ Data.Iteratee.Iteratee: isStreamFinished :: Monad m => Iteratee s m (Maybe SomeException)
- Data.Iteratee.Iteratee: joinIM :: (Monad m) => m (Iteratee s m a) -> Iteratee s m a
+ Data.Iteratee.Iteratee: joinIM :: Monad m => m (Iteratee s m a) -> Iteratee s m a
- Data.Iteratee.Iteratee: skipToEof :: (Monad m) => Iteratee s m ()
+ Data.Iteratee.Iteratee: skipToEof :: Monad m => Iteratee s m ()
- Data.Iteratee.Iteratee: throwErr :: (Monad m) => SomeException -> Iteratee s m a
+ Data.Iteratee.Iteratee: throwErr :: Monad m => SomeException -> Iteratee s m a
- Data.Iteratee.Iteratee: throwRecoverableErr :: (Monad m) => SomeException -> (Stream s -> Iteratee s m a) -> Iteratee s m a
+ Data.Iteratee.Iteratee: throwRecoverableErr :: Monad m => SomeException -> (Stream s -> Iteratee s m a) -> Iteratee s m a
- Data.NullPoint: empty :: (NullPoint c) => c
+ Data.NullPoint: empty :: NullPoint c => c
- Data.Nullable: class (NullPoint c) => Nullable c
+ Data.Nullable: class NullPoint c => Nullable c
- Data.Nullable: null :: (Nullable c) => c -> Bool
+ Data.Nullable: null :: Nullable c => c -> Bool

Files

iteratee-mtl.cabal view
@@ -1,5 +1,5 @@ name:          iteratee-mtl-version:       0.4.0.2+version:       0.5.0.0 synopsis:      Iteratee-based I/O description:   The Iteratee monad provides strict, safe, and functional I/O. In addition@@ -37,7 +37,7 @@    if flag(splitBase)     build-depends:-      base >= 3 && < 5+      base >= 3 && < 6   else     build-depends:       base < 3@@ -55,11 +55,11 @@       unix >= 2 && < 3    build-depends:-    ListLike         >= 1.0     && < 2,-    MonadCatchIO-mtl >  0.3     && < 0.4,-    bytestring       >= 0.9     && < 0.10,-    containers       >= 0.2     && < 0.4,-    mtl              >= 1.1     && < 1.2+    ListLike                  >= 1.0     && < 2,+    MonadCatchIO-mtl          >  0.3     && < 0.4,+    bytestring                >= 0.9     && < 0.10,+    containers                >= 0.2     && < 0.5,+    mtl                       >= 1.1     && < 1.2    exposed-modules:     Data.Nullable
src/Data/Iteratee/IO/Fd.hs view
@@ -47,14 +47,16 @@   Ptr el   -> ByteCount   -> Fd-  -> m (Either SomeException (Bool, s))-makefdCallback p bufsize fd = do+  -> st+  -> m (Either SomeException ((Bool, st), s))+makefdCallback p bufsize fd st = do   liftIO $ GHC.Conc.threadWaitRead fd   n <- liftIO $ myfdRead fd (castPtr p) bufsize   case n of     Left _   -> return $ Left undefined-    Right 0  -> return $ Right (False, empty)-    Right n' -> liftM (\s -> Right (True, s)) $ readFromPtr p (fromIntegral n')+    Right 0  -> return $ Right ((False, st), empty)+    Right n' -> liftM (\s -> Right ((True, st), s)) $+                  readFromPtr p (fromIntegral n')  -- |The enumerator of a POSIX File Descriptor.  This version enumerates -- over the entire contents of a file, in order, unless stopped by@@ -67,7 +69,7 @@ enumFd bs fd iter = do   let bufsize = bs * (sizeOf (undefined :: el))   p <- liftIO $ mallocBytes bufsize-  enumFromCallback (makefdCallback p (fromIntegral bufsize) fd) iter+  enumFromCallback (makefdCallback p (fromIntegral bufsize) fd) () iter  -- |A variant of enumFd that catches exceptions raised by the @Iteratee@. enumFdCatch@@ -80,7 +82,7 @@   let bufsize = bs * (sizeOf (undefined :: el))   p <- liftIO $ mallocBytes bufsize   enumFromCallbackCatch (makefdCallback p (fromIntegral bufsize) fd)-    handler iter+    handler () iter   -- |The enumerator of a POSIX File Descriptor: a variation of @enumFd@ that
src/Data/Iteratee/IO/Handle.hs view
@@ -41,13 +41,15 @@   Ptr el   -> Int   -> Handle-  -> m (Either SomeException (Bool, s))-makeHandleCallback p bsize h = do+  -> st+  -> m (Either SomeException ((Bool, st), s))+makeHandleCallback p bsize h st = do   n' <- liftIO (CIO.try $ hGetBuf h p bsize :: IO (Either SomeException Int))   case n' of     Left e -> return $ Left e-    Right 0 -> return $ Right (False, empty)-    Right n -> liftM (\s -> Right (True, s)) $ readFromPtr p (fromIntegral n)+    Right 0 -> return $ Right ((False, st), empty)+    Right n -> liftM (\s -> Right ((True, st), s)) $+                 readFromPtr p (fromIntegral n)   -- |The (monadic) enumerator of a file Handle.  This version enumerates@@ -62,7 +64,7 @@ enumHandle bs h i = do   let bufsize = bs * sizeOf (undefined :: el)   p <- liftIO $ mallocBytes bufsize-  enumFromCallback (makeHandleCallback p bufsize h) i+  enumFromCallback (makeHandleCallback p bufsize h) () i  -- |An enumerator of a file handle that catches exceptions raised by -- the Iteratee.@@ -79,7 +81,7 @@ enumHandleCatch bs h handler i = do   let bufsize = bs * sizeOf (undefined :: el)   p <- liftIO $ mallocBytes bufsize-  enumFromCallbackCatch (makeHandleCallback p bufsize h) handler i+  enumFromCallbackCatch (makeHandleCallback p bufsize h) handler () i   -- |The enumerator of a Handle: a variation of enumHandle that
src/Data/Iteratee/Iteratee.hs view
@@ -256,10 +256,11 @@ -- |Create an enumerator from a callback function enumFromCallback ::  (Monad m, NullPoint s) =>-  m (Either SomeException (Bool, s))+  (st -> m (Either SomeException ((Bool, st), s)))+  -> st   -> Enumerator s m a-enumFromCallback = flip enumFromCallbackCatch-  (\NotAnException -> return Nothing)+enumFromCallback c st =+  enumFromCallbackCatch c (\NotAnException -> return Nothing) st  -- Dummy exception to catch in enumFromCallback -- This never gets thrown, but it lets us@@ -274,17 +275,19 @@ -- The exception handler is called if an iteratee reports an exception. enumFromCallbackCatch ::  (IException e, Monad m, NullPoint s) =>-  m (Either SomeException (Bool, s))+  (st -> m (Either SomeException ((Bool, st), s)))   -> (e -> m (Maybe EnumException))+  -> st   -> Enumerator s m a enumFromCallbackCatch c handler = loop   where-    loop iter = runIter iter idoneM on_cont-    on_cont k Nothing = c >>= either (return . k . EOF . Just) (uncurry check)+    loop st iter = runIter iter idoneM (on_cont st)+    on_cont st k Nothing = c st >>=+        either (return . k . EOF . Just) (uncurry check)       where-        check b = if b then loop . k . Chunk else return . k . Chunk-    on_cont k j@(Just e) = case fromException e of-      Just e' -> handler e' >>= maybe (loop . k $ Chunk empty)+        check (b,st') = if b then loop st' . k . Chunk else return . k . Chunk+    on_cont st k j@(Just e) = case fromException e of+      Just e' -> handler e' >>= maybe (loop st . k $ Chunk empty)                                  (return . icont k . Just) . fmap toException       Nothing -> return (icont k j) 
src/Data/Iteratee/ListLike.hs view
@@ -20,6 +20,7 @@   ,head   ,heads   ,peek+  ,roll   ,length   -- ** Nested iteratee combinators   ,take@@ -51,6 +52,7 @@ import qualified Data.ListLike.FoldableLL as FLL import Data.Iteratee.Iteratee import Control.Monad.Trans+import Control.Applicative import Data.Monoid import Data.Word (Word8) import qualified Data.ByteString as B@@ -168,6 +170,28 @@       | True        = idone (Just $ LL.head vec) s     step stream     = idone Nothing stream {-# INLINE peek #-}++-- | Return a chunk of `t' elements length, while consuming `d' elements+--   from the stream.  Useful for creating a "rolling average" with convStream.+roll :: (Monad m, Functor m, Nullable s, LL.ListLike s el, LL.ListLike s' s) =>+  Int+  -> Int+  -> Iteratee s m s'+roll t d | t > d  = liftI step+  where+    step (Chunk vec)+      | 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+      | True               = liftI (step' vec)+    step stream            = idone LL.empty stream+    step' v1 (Chunk vec)   = step . Chunk $ v1 `mappend` vec+    step' v1 stream        = idone (LL.singleton v1) stream+roll t d = LL.singleton <$> joinI (take t stream2stream) <* drop (d-t)+  -- d is >= t, so this version works+{-# INLINE roll #-}   -- |Drop n elements of the stream, if there are that many.