Safe Haskell | Safe-Inferred |
---|---|

Language | Haskell2010 |

## Synopsis

- foldrT :: Monad m => (o -> b -> b) -> b -> MachineT m k o -> m b
- foldlT :: Monad m => (b -> o -> b) -> b -> MachineT m k o -> m b
- foldMapT :: (Monad m, Monoid r) => (o -> r) -> MachineT m k o -> m r
- foldT :: (Monad m, Monoid o) => MachineT m k o -> m o
- runT1 :: Monad m => MachineT m k o -> m (Maybe o)
- runT :: Monad m => MachineT m k b -> m [b]
- runT_ :: Monad m => MachineT m k b -> m ()

# Documentation

foldrT :: Monad m => (o -> b -> b) -> b -> MachineT m k o -> m b Source #

Right fold over a stream. This will be lazy if the underlying monad is.

runT = foldrT (:) []

foldlT :: Monad m => (b -> o -> b) -> b -> MachineT m k o -> m b Source #

Strict left fold over a stream.

foldMapT :: (Monad m, Monoid r) => (o -> r) -> MachineT m k o -> m r Source #

Strict fold over a stream. Items are accumulated on the right:

... ((f o1 <> f o2) <> f o3) ...

Where this is expensive, use the dual monoid instead.

foldT :: (Monad m, Monoid o) => MachineT m k o -> m o Source #

Strict fold over a monoid stream. Items are accumulated on the right:

... ((o1 <> o2) <> o3) ...

Where this is expensive, use the dual monoid instead.

foldT = foldMapT id

runT1 :: Monad m => MachineT m k o -> m (Maybe o) Source #

Run a machine with no input until it yields for the first time,
then stop it. This is intended primarily for use with accumulating
machines, such as the ones produced by `fold`

or `fold1`

runT1 m = getFirst $ foldMapT (First . Just) (m ~> taking 1)