Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- newtype Emitter m a = Emitter {}
- mapE :: Monad m => (a -> m (Maybe b)) -> Emitter m a -> Emitter m b
- readE :: (Functor m, Read a) => Emitter m Text -> Emitter m (Either Text a)
- readE_ :: (Monad m, Read a) => Emitter m Text -> Emitter m a
- parseE :: Functor m => Parser a -> Emitter m Text -> Emitter m (Either Text a)
- parseE_ :: Monad m => Parser a -> Emitter m Text -> Emitter m a
- premapE :: Applicative m => (Emitter m a -> m ()) -> Emitter m a -> Emitter m a
- postmapE :: Monad m => (Emitter m a -> m ()) -> Emitter m a -> Emitter m a
- postmapM :: Monad m => (a -> m ()) -> Emitter m a -> Emitter m a
- toListE :: Monad m => Emitter m a -> m [a]
- unlistE :: Monad m => Emitter m [a] -> Emitter (StateT [a] m) a
- stateE :: Monad m => Emitter (StateT [a] m) a
- takeE :: Monad m => Int -> Emitter m a -> Emitter (StateT Int m) a
- takeUntilE :: Monad m => (a -> Bool) -> Emitter m a -> Emitter m a
- filterE :: Monad m => (a -> Bool) -> Emitter m a -> Emitter m a
Documentation
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.
Instances
Monad m => Monad (Emitter m) Source # | |
Functor m => Functor (Emitter m) Source # | |
Applicative m => Applicative (Emitter m) Source # | |
(Monad m, Alternative m) => Alternative (Emitter m) Source # | |
(Alternative m, Monad m) => MonadPlus (Emitter m) Source # | |
MFunctor Emitter Source # | |
(Alternative m, Monad m) => Semigroup (Emitter m a) Source # | |
(Alternative m, Monad m) => Monoid (Emitter m a) Source # | |
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
parseE :: Functor m => Parser a -> Emitter m Text -> Emitter m (Either Text a) Source #
parse emitter which returns the original text on failure
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)
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