drinkery-0.1: Boozy streaming library

Safe HaskellSafe
LanguageHaskell2010

Data.Drinkery.Tap

Contents

Synopsis

Tap

newtype Tap r s m Source #

Tap m r s is a non-monadic, endless producer of s. It takes a request r.

Constructors

Tap 

Fields

Instances

CloseRequest r => Closable (Tap r s) Source # 

Methods

close :: Monad m => Tap r s m -> m () Source #

consTap :: (Monoid r, Applicative m) => s -> Tap r s m -> Tap r s m Source #

Prepend a new element, delaying requests.

orderTap :: Monoid r => r -> Tap r s m -> Tap r s m Source #

Send a request to a Tap.

makeTap :: (Monoid r, Monad m) => m (Tap r s m) -> Tap r s m Source #

Involve an action.

Barman

newtype Barman r s m a Source #

Monadic producer

Constructors

Barman 

Fields

Instances

MonadDrunk t m => MonadDrunk t (Barman p q m) Source # 

Methods

drinking :: (forall (n :: * -> *). Monad n => t n -> n (a, t n)) -> Barman p q m a Source #

MonadTrans (Barman r s) Source # 

Methods

lift :: Monad m => m a -> Barman r s m a #

Monad (Barman r s m) Source # 

Methods

(>>=) :: Barman r s m a -> (a -> Barman r s m b) -> Barman r s m b #

(>>) :: Barman r s m a -> Barman r s m b -> Barman r s m b #

return :: a -> Barman r s m a #

fail :: String -> Barman r s m a #

Functor (Barman r s m) Source # 

Methods

fmap :: (a -> b) -> Barman r s m a -> Barman r s m b #

(<$) :: a -> Barman r s m b -> Barman r s m a #

Applicative (Barman r s m) Source # 

Methods

pure :: a -> Barman r s m a #

(<*>) :: Barman r s m (a -> b) -> Barman r s m a -> Barman r s m b #

liftA2 :: (a -> b -> c) -> Barman r s m a -> Barman r s m b -> Barman r s m c #

(*>) :: Barman r s m a -> Barman r s m b -> Barman r s m b #

(<*) :: Barman r s m a -> Barman r s m b -> Barman r s m a #

yield :: (Monoid r, Applicative m) => s -> Barman r s m () Source #

Produce one element. Orders are put off.

accept :: Monoid r => Barman r s m r Source #

Accept orders and clear the queue.

inexhaustible :: Barman r s m x -> Tap r s m Source #

Create a infinite Tap from a Barman.

inexhaustible :: Barman r s (Drinker tap m) x -> Distiller tap m r s

runBarman :: (Monoid r, Applicative m, Alternative f) => Barman r (f s) m a -> Tap r (f s) m Source #

Run a Barman action and terminate the stream with eof.

runBarman' :: (Applicative m, Alternative f) => Barman () (f s) m a -> Tap () (f s) m Source #

Specialised runBarman

pour :: (Monoid r, Applicative f, Applicative m) => s -> Barman r (f s) m () Source #

Sommelier

newtype Sommelier r m s Source #

Backtracking producer a.k.a. "ListT done right".

Constructors

Sommelier 

Fields

Instances

MonadDrunk t m => MonadDrunk t (Sommelier p m) Source # 

Methods

drinking :: (forall (n :: * -> *). Monad n => t n -> n (a, t n)) -> Sommelier p m a Source #

MonadTrans (Sommelier r) Source # 

Methods

lift :: Monad m => m a -> Sommelier r m a #

Monad (Sommelier r m) Source # 

Methods

(>>=) :: Sommelier r m a -> (a -> Sommelier r m b) -> Sommelier r m b #

(>>) :: Sommelier r m a -> Sommelier r m b -> Sommelier r m b #

return :: a -> Sommelier r m a #

fail :: String -> Sommelier r m a #

Functor (Sommelier r m) Source # 

Methods

fmap :: (a -> b) -> Sommelier r m a -> Sommelier r m b #

(<$) :: a -> Sommelier r m b -> Sommelier r m a #

Applicative (Sommelier r m) Source # 

Methods

pure :: a -> Sommelier r m a #

(<*>) :: Sommelier r m (a -> b) -> Sommelier r m a -> Sommelier r m b #

liftA2 :: (a -> b -> c) -> Sommelier r m a -> Sommelier r m b -> Sommelier r m c #

(*>) :: Sommelier r m a -> Sommelier r m b -> Sommelier r m b #

(<*) :: Sommelier r m a -> Sommelier r m b -> Sommelier r m a #

MonadIO m => MonadIO (Sommelier r m) Source # 

Methods

liftIO :: IO a -> Sommelier r m a #

Alternative (Sommelier r m) Source # 

Methods

empty :: Sommelier r m a #

(<|>) :: Sommelier r m a -> Sommelier r m a -> Sommelier r m a #

some :: Sommelier r m a -> Sommelier r m [a] #

many :: Sommelier r m a -> Sommelier r m [a] #

MonadPlus (Sommelier r m) Source # 

Methods

mzero :: Sommelier r m a #

mplus :: Sommelier r m a -> Sommelier r m a -> Sommelier r m a #

taste :: Foldable f => f s -> Sommelier r m s Source #

Take all the elements in a Foldable container.

inquire :: Monoid r => Sommelier r m r Source #

Get a request.

runSommelier :: (Monoid r, Applicative m, Alternative f) => Sommelier r m s -> Tap r (f s) m Source #

Run Sommelier and terminate the stream with eof.

runSommelier' :: (Applicative m, Alternative f) => Sommelier () m s -> Tap () (f s) m Source #

Specialised runSommelier

Drinker

drink :: (Monoid r, MonadDrunk (Tap r s) m) => m s Source #

leftover :: (Monoid r, MonadDrunk (Tap r s) m) => s -> m () Source #

request :: (Monoid r, MonadDrunk (Tap r s) m) => r -> m () Source #

smell :: (Monoid r, MonadDrunk (Tap r s) m) => m s Source #

Get one element without consuming.

End of stream

eof :: (Applicative m, Alternative f) => Tap r (f a) m Source #

End of stream