conduino-0.1.0.0: Lightweight composable continuation-based stream processors

Safe HaskellNone
LanguageHaskell2010

Data.Conduino

Synopsis

Documentation

data Pipe i o u m a Source #

Similar to Conduit

  • i: Type of input stream
  • o: Type of output stream
  • u: Type of the result of the upstream pipe (Outputted when upstream pipe finishes)
  • m: Underlying monad
  • a: Result type (Outputted when finished)

Some specializations:

  • A pipe is a source if i is '()': it doesn't need anything to go pump out items.

If a pipe is source and a is Void, it means that it will produce forever.

  • A pipe is a sink if o is Void: it will never yield anything else downstream.
  • If a pipe is both a source and a sink, it is an effect.
  • Normally you can ask for input upstream with await, which returns Nothing if the pipe upstream stops producing. However, if u is Void, it means that the pipe upstream will never stop, so you can use awaitSurely to get a guaranteed answer.
Instances
MonadTrans (Pipe i o u) Source # 
Instance details

Defined in Data.Conduino

Methods

lift :: Monad m => m a -> Pipe i o u m a #

Monad (Pipe i o u m) Source # 
Instance details

Defined in Data.Conduino

Methods

(>>=) :: Pipe i o u m a -> (a -> Pipe i o u m b) -> Pipe i o u m b #

(>>) :: Pipe i o u m a -> Pipe i o u m b -> Pipe i o u m b #

return :: a -> Pipe i o u m a #

fail :: String -> Pipe i o u m a #

Functor (Pipe i o u m) Source # 
Instance details

Defined in Data.Conduino

Methods

fmap :: (a -> b) -> Pipe i o u m a -> Pipe i o u m b #

(<$) :: a -> Pipe i o u m b -> Pipe i o u m a #

Applicative (Pipe i o u m) Source # 
Instance details

Defined in Data.Conduino

Methods

pure :: a -> Pipe i o u m a #

(<*>) :: Pipe i o u m (a -> b) -> Pipe i o u m a -> Pipe i o u m b #

liftA2 :: (a -> b -> c) -> Pipe i o u m a -> Pipe i o u m b -> Pipe i o u m c #

(*>) :: Pipe i o u m a -> Pipe i o u m b -> Pipe i o u m b #

(<*) :: Pipe i o u m a -> Pipe i o u m b -> Pipe i o u m a #

(.|) :: Monad m => Pipe a b u m v -> Pipe b c v m r -> Pipe a c u m r infixr 2 Source #

runPipe :: Monad m => Pipe () Void u m a -> m a Source #

awaitEither :: Pipe i o u m (Either i u) Source #

await :: Pipe i o u m (Maybe i) Source #

repeatM :: Monad m => m o -> Pipe i o u m u Source #

unfoldP :: (b -> Maybe (a, b)) -> b -> Pipe i a u m () Source #

unfoldPForever :: (b -> (a, b)) -> b -> Pipe i a u m r Source #

iterateP :: (a -> a) -> a -> Pipe i a u m r Source #

sourceList :: Foldable t => t a -> Pipe i a u m () Source #

awaitForever :: (i -> Pipe i o u m a) -> Pipe i o u m u Source #

mapP :: (a -> b) -> Pipe a b u m u Source #

mapMP :: Monad m => (a -> m b) -> Pipe a b u m u Source #

dropP :: Int -> Pipe i o u m () Source #

foldrP :: (a -> b -> b) -> b -> Pipe a Void u m b Source #

sinkList :: Pipe i Void u m [i] Source #

newtype ZipSink i u m a Source #

Constructors

ZipSink 

Fields

Instances
Functor (ZipSink i u m) Source # 
Instance details

Defined in Data.Conduino

Methods

fmap :: (a -> b) -> ZipSink i u m a -> ZipSink i u m b #

(<$) :: a -> ZipSink i u m b -> ZipSink i u m a #

Monad m => Applicative (ZipSink i u m) Source #

<*> = distribute input to all, and return result when they finish

pure = immediately finish

Instance details

Defined in Data.Conduino

Methods

pure :: a -> ZipSink i u m a #

(<*>) :: ZipSink i u m (a -> b) -> ZipSink i u m a -> ZipSink i u m b #

liftA2 :: (a -> b -> c) -> ZipSink i u m a -> ZipSink i u m b -> ZipSink i u m c #

(*>) :: ZipSink i u m a -> ZipSink i u m b -> ZipSink i u m b #

(<*) :: ZipSink i u m a -> ZipSink i u m b -> ZipSink i u m a #

Monad m => Alternative (ZipSink i u m) Source #

<|> = distribute input to all, and return the first result that finishes

empty = never finish

Instance details

Defined in Data.Conduino

Methods

empty :: ZipSink i u m a #

(<|>) :: ZipSink i u m a -> ZipSink i u m a -> ZipSink i u m a #

some :: ZipSink i u m a -> ZipSink i u m [a] #

many :: ZipSink i u m a -> ZipSink i u m [a] #