drinkery-0.2.2: 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 :: (Semigroup r, Applicative m) => s -> Tap r s m -> Tap r s m Source #

Prepend a new element, delaying requests.

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

Send a request to a Tap.

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

Involve an action.

repeatTap :: Applicative m => s -> Tap r s m Source #

repeatTapM :: Applicative m => m s -> Tap r s m Source #

repeatTapM' :: Applicative m => m s -> Tap () s m Source #

newtype Joint r m s Source #

(<*>) zips two taps.

Constructors

Joint 

Fields

Instances

Functor m => Functor (Joint r m) Source # 

Methods

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

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

Applicative m => Applicative (Joint r m) Source # 

Methods

pure :: a -> Joint r m a #

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

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

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

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

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 #

MonadIO m => MonadIO (Barman r s m) Source # 

Methods

liftIO :: IO a -> Barman r s m a #

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

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 :: (Semigroup r, Applicative m) => s -> Barman r s m () Source #

Produce one element. Orders are put off.

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 :: (Semigroup 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

retractSommelier :: Monad m => Sommelier () m s -> m () Source #

Drinker

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

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

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

smell :: (Monoid r, Semigroup 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