drinkery-0: Boozy streaming library

Safe HaskellSafe
LanguageHaskell2010

Data.Drinkery.Distiller

Contents

Synopsis

Documentation

type Distiller p q m = Tap (Patron p q m) Source #

'Distiller p q m r s' is a stream transducer which has five parameters:

  • p request to the upstream
  • q input
  • m underlying monad
  • r request from the downstream
  • s output

Special combinators

(+&) :: (Monoid r, CloseRequest r, Monad m) => Tap m r s -> Patron r s m a -> m a infix 6 Source #

Connect a tap with a patron and close the used tap.

($&) :: (Monoid r, Monad m) => Distiller p q m r s -> Patron r s m a -> Patron p q m a infixr 7 Source #

Like $&& but discards the used distiller.

Attaching a distiller

(++$) :: (Monoid p, Monad m) => Tap m p q -> Distiller p q m r s -> Tap m r s infixl 7 Source #

Attach a distiller to a tap.

Mnemonic:

  • + Left operand is a tap.
  • + Returns a tap.
  • $ Right operand is a distiller.

($$$) :: (Monoid r, Monad m) => Distiller p q m r s -> Distiller r s m t u -> Distiller p q m t u infixl 8 Source #

Full duplex composition of distillers.

Mnemonic:

  • $ Left operand is a distiller.
  • $ Returns a distiller.
  • $ Right operand is a distiller.

Patron

(++&) :: (Monoid r, Monad m) => Tap m r s -> Patron r s m a -> m (Tap m r s, a) infix 6 Source #

Connect a tap with a patron.

Mnemonic:

  • + Left operand is a tap.
  • + Returns a tap (along with the result).
  • & Right operand is a patron.

($$&) :: (Monoid r, Monad m) => Distiller p q m r s -> Patron r s m a -> Patron p q m (Distiller p q m r s, a) infixr 7 Source #

Attach a distiller to a patron.

Mnemonic:

  • $ Left operand is a distiller.
  • $ Returns the used distiller.
  • & Right operand is a patron.

Stock distillers

mapping :: Functor m => (a -> b) -> Distiller r a m r b Source #

traversing :: Monad m => (a -> m b) -> Distiller r a m r b Source #

filtering :: (Monoid r, Functor m) => (a -> Bool) -> Distiller r a m r a Source #

scanning :: (Monoid r, Functor m) => (b -> a -> b) -> b -> Distiller r a m r b Source #

scanningMaybe :: (Monoid r, Functor m) => (b -> a -> b) -> b -> Distiller r (Maybe a) m r (Maybe b) Source #

throughMaybe :: (Monoid r, Monad m) => Distiller p q m r s -> Distiller p (Maybe q) m r (Maybe s) Source #

Transform a Distiller to operate on a stream of Maybes.

Internal

boozeOn :: (Monoid r, Monad m) => (forall x. n x -> m x) -> (r -> [s] -> Tap m r s -> a -> m z) -> r -> [s] -> Tap m r s -> Boozer r s n a -> m z Source #

distillWith :: (Monoid p, Monad m) => (forall x. n x -> m x) -> Tap m p q -> Distiller p q n r s -> Tap m r s Source #