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 +16/−14
- fusion.cabal +4/−3
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