Safe Haskell | None |
---|
Infinite stream of unique tokens monad transformer
- data StreamT e m a
- class Monad m => MonadStream e m | m -> e where
- data Infinite a = a :< (Infinite a)
- data Token
- runStreamT :: Monad m => Infinite e -> StreamT e m a -> m a
- mapStreamT :: (m (Infinite e, a) -> n (Infinite e, b)) -> StreamT e m a -> StreamT e n b
- tokens :: Infinite Token
- noTokens :: Infinite Void
- fromList :: [a] -> Infinite a
Types
Monad
Monad transformer for the never ending stream of stuff
(Monad m, MonadState s m) => MonadState s (StreamT e m) | |
(Monad m, MonadReader r m) => MonadReader r (StreamT e m) | |
(~ Bool (IsToken e) True, Monad m) => MonadStream e (StreamT e m) | |
MonadTrans (StreamT e) | |
Monad m => Monad (StreamT e m) | |
Monad m => Functor (StreamT e m) | |
Monad m => Applicative (StreamT e m) |
mtl-style class
class Monad m => MonadStream e m | m -> e whereSource
mtl-style class, to avoid manual lifting
Get next element from the stream; advance that stream by one step
Take a look at the next stream element, without modifying the stream
(Functor m, MonadStream e m) => MonadStream e (Free m) | |
(Monad m, MonadStream e m) => MonadStream e (StateT s m) | |
(Monad m, MonadStream e m) => MonadStream e (ReaderT r m) | |
(~ Bool (IsToken e) True, Monad m) => MonadStream e (StreamT e m) |
Token stream
Never ending stream of stuff
Token.
Supposedly, the only way to get tokens is using tokens
,
so they are somewhat unique
Do things with StreamT
runStreamT :: Monad m => Infinite e -> StreamT e m a -> m aSource
Run StreamT
with the supplied stream.
>>>
runStreamT (fromList (map Token [1..])) (replicateM 3 next)
[Token 1,Token 2,Token 3]
mapStreamT :: (m (Infinite e, a) -> n (Infinite e, b)) -> StreamT e m a -> StreamT e n bSource
Map both the value and underlying monad