packages feed

fusion 0.1.0 → 0.1.1

raw patch · 2 files changed

+20/−17 lines, 2 filesdep +voiddep ~basedep ~transformersPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: void

Dependency ranges changed: base, transformers

API changes (from Hackage documentation)

- Fusion: [getListT] :: ListT m a -> Stream a m ()
- Fusion: [getStepList] :: StepList s r a -> Step s a r
- Fusion: concat :: Foldable t => t [a] -> [a]
- Fusion: instance Control.Monad.Trans.Class.MonadTrans (Fusion.Stream a)
- Fusion: instance GHC.Base.Functor (Fusion.Step s a)
- Fusion: instance GHC.Base.Functor (Fusion.StepList s r)
- Fusion: instance GHC.Base.Functor m => GHC.Base.Functor (Fusion.ListT m)
- Fusion: instance GHC.Base.Functor m => GHC.Base.Functor (Fusion.Stream a m)
- Fusion: instance GHC.Base.Monad m => GHC.Base.Applicative (Fusion.ListT m)
- Fusion: instance GHC.Base.Monad m => GHC.Base.Applicative (Fusion.Stream a m)
- Fusion: instance GHC.Base.Monad m => GHC.Base.Monad (Fusion.ListT m)
- Fusion: instance GHC.Show.Show a => GHC.Show.Show (Fusion.Stream a Data.Functor.Identity.Identity r)
+ Fusion: concatL :: (Monad m, Applicative m) => ListT m (ListT m a) -> ListT m a
+ Fusion: getListT :: ListT m a -> Stream a m ()
+ Fusion: getStepList :: StepList s r a -> Step s a r
+ Fusion: instance (Monad m, Applicative m) => Applicative (ListT m)
+ Fusion: instance (Monad m, Applicative m) => Applicative (Stream a m)
+ Fusion: instance (Monad m, Applicative m) => Monad (ListT m)
+ Fusion: instance Functor (Step s a)
+ Fusion: instance Functor (StepList s r)
+ Fusion: instance Functor m => Functor (ListT m)
+ Fusion: instance Functor m => Functor (Stream a m)
+ Fusion: instance MonadTrans (Stream a)
+ Fusion: instance Show a => Show (Stream a Identity r)
- Fusion: each :: (Monad m, Foldable f) => f a -> Producer a m ()
+ Fusion: each :: (Applicative m, Foldable f) => f a -> Producer a m ()
- Fusion: emptyStream :: Monad m => Stream Void m ()
+ Fusion: emptyStream :: (Monad m, Applicative m) => Stream Void m ()
- Fusion: mapP :: Monad m => (a -> b) -> Pipe a b m ()
+ Fusion: mapP :: (Monad m, Applicative m) => (a -> b) -> Pipe a b m ()

Files

Fusion.hs view
@@ -15,7 +15,7 @@     , toListS, lazyToListS, runEffect, emptyStream     , bracketS, next     -- * StreamList-    , ListT(..), concat+    , ListT(..), concatL     -- * Pipes     , Producer, Pipe, Consumer     , each, mapP@@ -60,7 +60,7 @@     fmap f (Stream k m) = Stream (fmap (fmap f) . k) m     {-# INLINE fmap #-} -instance Monad m => Applicative (Stream a m) where+instance (Monad m, Applicative m) => Applicative (Stream a m) where     pure x = Stream (pure . Done) (pure x)     {-# INLINE pure #-}     sf <*> sx = Stream (pure . Done) (runEffect sf <*> runEffect sx)@@ -95,8 +95,8 @@     go (Just (Stream ys j)) e@(Yield s _) = go' `liftM` (j >>= ys)       where         go' (Done _)    = Skip (Left s)-        go' (Skip s')   = Skip (Right (e, Stream ys (pure s')))-        go' (Yield s' a) = Yield (Right (e, Stream ys (pure s'))) a+        go' (Skip s')   = Skip (Right (e, Stream ys (return s')))+        go' (Yield s' a) = Yield (Right (e, Stream ys (return s'))) a {-# SPECIALIZE concatS :: Stream (Stream a IO r) IO r -> Stream a IO r #-}  fromList :: Foldable f => Applicative m => f a -> Stream a m ()@@ -107,7 +107,7 @@ fromListM :: (Monad m, Foldable f) => m (f a) -> Stream a m () fromListM xs = Stream (\case []     -> return $ Done ()                              (y:ys) -> return $ Yield ys y)-                      (toList <$> xs)+                      (toList `liftM` xs) {-# INLINE fromListM #-}  runEffect :: Monad m => Stream a m r -> m r@@ -134,7 +134,7 @@     go (Yield s a) = f s >>= liftM (a:) . unsafeInterleaveIO . go {-# INLINE lazyToListS #-} -emptyStream :: Monad m => Stream Void m ()+emptyStream :: (Monad m, Applicative m) => Stream Void m () emptyStream = pure () {-# INLINE emptyStream #-} @@ -144,7 +144,7 @@          -> (forall r. s -> (a -> s -> m r) -> (s -> m r) -> m r -> m r)          -> Stream a m () bracketS i f step = Stream go $ mask $ \_unmask -> do-    s <- liftBase i+    s   <- liftBase i     key <- register (f s)     return (s, key)   where@@ -152,6 +152,7 @@         step s (\a s' -> return $ Yield (s', key) a)                (\s'   -> return $ Skip (s', key))                (release key >> (const (Done ()) `liftM` liftBase (f s)))+{- {-# SPECIALIZE bracketS       :: IO s       -> (s -> IO ())@@ -160,6 +161,7 @@            -> SafeT IO r            -> SafeT IO r)       -> Stream a (SafeT IO) () #-}+-}  next :: Monad m => Stream a m r -> m (Either r (a, Stream a m r)) next (Stream xs i) = do@@ -179,20 +181,20 @@     fmap f (ListT s) = ListT $ mapS f s     {-# INLINE fmap #-} -instance Monad m => Applicative (ListT m) where+instance (Monad m, Applicative m) => Applicative (ListT m) where     pure = return     {-# INLINE pure #-}     (<*>) = ap     {-# INLINE (<*>) #-} -instance Monad m => Monad (ListT m) where+instance (Monad m, Applicative m) => Monad (ListT m) where     return x = ListT $ fromList [x]     {-# INLINE return #-}     m >>= f = concatL $ fmap f m     {-# INLINE (>>=) #-} -concatL :: Monad m => ListT m (ListT m a) -> ListT m a-concatL = ListT . concatS . getListT . fmap getListT+concatL :: (Monad m, Applicative m) => ListT m (ListT m a) -> ListT m a+concatL = ListT . concatS . getListT . liftM getListT {-# INLINE concatL #-}  -- Pipes@@ -201,10 +203,10 @@ type Pipe     a b m r = Stream a m () -> Stream b m r type Consumer a   m r = Stream a m () -> m r -each :: (Monad m, Foldable f) => f a -> Producer a m ()+each :: (Applicative m, Foldable f) => f a -> Producer a m () each = fromList {-# INLINE each #-} -mapP :: Monad m => (a -> b) -> Pipe a b m ()-mapP f = getListT . fmap f . ListT+mapP :: (Monad m, Applicative m) => (a -> b) -> Pipe a b m ()+mapP f = getListT . liftM f . ListT {-# INLINE mapP #-}
fusion.cabal view
@@ -1,5 +1,5 @@ name:                fusion-version:             0.1.0+version:             0.1.1 synopsis:            Effectful streaming library based on shortcut fusion techniques description:         Effectful streaming library based on shortcut fusion techniques homepage:            https://github.com/jwiegley/fusion@@ -16,9 +16,10 @@   exposed-modules:     Fusion   other-extensions:    DeriveFunctor, LambdaCase, RankNTypes, GADTs   build-depends:       -      base         >=4.8 && <4.9-    , transformers >=0.4 && <0.5+      base         >=4.7 && <5+    , transformers >=0.3 && <0.5     , pipes-safe   >=2.2 && <3+    , void         >=0.7 && <1   default-language:    Haskell2010  Test-suite doctests