fusion-0.1.1: Effectful streaming library based on shortcut fusion techniques

Safe HaskellNone
LanguageHaskell2010

Fusion

Contents

Synopsis

Step

data Step s a r Source

A simple stepper, as suggested by Duncan Coutts in his Thesis paper, "Stream Fusion: Practical shortcut fusion for coinductive sequence types". This version adds a result type.

Constructors

Done r 
Skip s 
Yield s a 

Instances

Functor (Step s a) 

StepList

newtype StepList s r a Source

Constructors

StepList 

Fields

getStepList :: Step s a r
 

Instances

Stream

data Stream a m r where Source

Constructors

Stream :: (s -> m (Step s a r)) -> m s -> Stream a m r 

Instances

mapS :: Functor m => (a -> b) -> Stream a m r -> Stream b m r Source

Map over the values produced by a stream.

>>> mapS (+1) (fromList [1..3]) :: Stream Int Identity ()
Stream [2,3,4]

concatS :: Monad m => Stream (Stream a m r) m r -> Stream a m r Source

fromList :: Foldable f => Applicative m => f a -> Stream a m () Source

fromListM :: (Monad m, Foldable f) => m (f a) -> Stream a m () Source

toListS :: Monad m => Stream a m r -> m [a] Source

lazyToListS :: Stream a IO r -> IO [a] Source

runEffect :: Monad m => Stream a m r -> m r Source

bracketS :: (Monad m, MonadMask m, MonadSafe m) => Base m s -> (s -> Base m ()) -> (forall r. s -> (a -> s -> m r) -> (s -> m r) -> m r -> m r) -> Stream a m () Source

next :: Monad m => Stream a m r -> m (Either r (a, Stream a m r)) Source

StreamList

newtype ListT m a Source

Constructors

ListT 

Fields

getListT :: Stream a m ()
 

Instances

concatL :: (Monad m, Applicative m) => ListT m (ListT m a) -> ListT m a Source

Pipes

type Producer b m r = Stream b m r Source

type Pipe a b m r = Stream a m () -> Stream b m r Source

type Consumer a m r = Stream a m () -> m r Source

each :: (Applicative m, Foldable f) => f a -> Producer a m () Source

mapP :: (Monad m, Applicative m) => (a -> b) -> Pipe a b m () Source