box-0.6.0: boxes

Safe HaskellNone
LanguageHaskell2010

Box.Emitter

Description

Synopsis

Documentation

newtype Emitter m a Source #

an Emitter "emits" values of type a. A Source & a Producer (of a's) are the two other alternative but overloaded metaphors out there.

An Emitter "reaches into itself" for the value to emit, where itself is an opaque thing from the pov of usage. An Emitter is named for its main action: it emits.

Constructors

Emitter 

Fields

Instances
Monad m => Monad (Emitter m) Source # 
Instance details

Defined in Box.Emitter

Methods

(>>=) :: Emitter m a -> (a -> Emitter m b) -> Emitter m b #

(>>) :: Emitter m a -> Emitter m b -> Emitter m b #

return :: a -> Emitter m a #

fail :: String -> Emitter m a #

Functor m => Functor (Emitter m) Source # 
Instance details

Defined in Box.Emitter

Methods

fmap :: (a -> b) -> Emitter m a -> Emitter m b #

(<$) :: a -> Emitter m b -> Emitter m a #

Applicative m => Applicative (Emitter m) Source # 
Instance details

Defined in Box.Emitter

Methods

pure :: a -> Emitter m a #

(<*>) :: Emitter m (a -> b) -> Emitter m a -> Emitter m b #

liftA2 :: (a -> b -> c) -> Emitter m a -> Emitter m b -> Emitter m c #

(*>) :: Emitter m a -> Emitter m b -> Emitter m b #

(<*) :: Emitter m a -> Emitter m b -> Emitter m a #

(Monad m, Alternative m) => Alternative (Emitter m) Source # 
Instance details

Defined in Box.Emitter

Methods

empty :: Emitter m a #

(<|>) :: Emitter m a -> Emitter m a -> Emitter m a #

some :: Emitter m a -> Emitter m [a] #

many :: Emitter m a -> Emitter m [a] #

(Alternative m, Monad m) => MonadPlus (Emitter m) Source # 
Instance details

Defined in Box.Emitter

Methods

mzero :: Emitter m a #

mplus :: Emitter m a -> Emitter m a -> Emitter m a #

MFunctor Emitter Source # 
Instance details

Defined in Box.Emitter

Methods

hoist :: Monad m => (forall a. m a -> n a) -> Emitter m b -> Emitter n b #

(Alternative m, Monad m) => Semigroup (Emitter m a) Source # 
Instance details

Defined in Box.Emitter

Methods

(<>) :: Emitter m a -> Emitter m a -> Emitter m a #

sconcat :: NonEmpty (Emitter m a) -> Emitter m a #

stimes :: Integral b => b -> Emitter m a -> Emitter m a #

(Alternative m, Monad m) => Monoid (Emitter m a) Source # 
Instance details

Defined in Box.Emitter

Methods

mempty :: Emitter m a #

mappend :: Emitter m a -> Emitter m a -> Emitter m a #

mconcat :: [Emitter m a] -> Emitter m a #

mapE :: Monad m => (a -> m (Maybe b)) -> Emitter m a -> Emitter m b Source #

like a monadic mapMaybe. (See witherable)

readE :: (Functor m, Read a) => Emitter m Text -> Emitter m (Either Text a) Source #

read parse emitter, returning the original string on error

readE_ :: (Monad m, Read a) => Emitter m Text -> Emitter m a Source #

no error-reporting reading

parseE :: Functor m => Parser a -> Emitter m Text -> Emitter m (Either Text a) Source #

parse emitter which returns the original text on failure

parseE_ :: Monad m => Parser a -> Emitter m Text -> Emitter m a Source #

no error-reporting parsing

premapE :: Applicative m => (Emitter m a -> m ()) -> Emitter m a -> Emitter m a Source #

adds a pre-emit monadic action to the emitter

postmapE :: Monad m => (Emitter m a -> m ()) -> Emitter m a -> Emitter m a Source #

adds a post-emit monadic action to the emitter

postmapM :: Monad m => (a -> m ()) -> Emitter m a -> Emitter m a Source #

add a post-emit monadic action on the emitted value (if there was any)

toListE :: Monad m => Emitter m a -> m [a] Source #

turn an emitter into a list

unlistE :: Monad m => Emitter m [a] -> Emitter (StateT [a] m) a Source #

convert a list emitter to a Stateful element emitter

stateE :: Monad m => Emitter (StateT [a] m) a Source #

emit from a StateT list

This compiles but is an infinite "a" emitter:

let e1 = hoist (flip evalStateT ["a", "b"::Text]) stateE :: Emitter IO Text

takeE :: Monad m => Int -> Emitter m a -> Emitter (StateT Int m) a Source #

takeUntilE :: Monad m => (a -> Bool) -> Emitter m a -> Emitter m a Source #

Take from an emitter until predicate

filterE :: Monad m => (a -> Bool) -> Emitter m a -> Emitter m a Source #

Filter emissions according to a predicate.