Copyright | (c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2020 Kowainik |
---|---|

License | MIT |

Maintainer | Kowainik <xrom.xkov@gmail.com> |

Stability | Stable |

Portability | Portable |

Safe Haskell | Trustworthy |

Language | Haskell2010 |

Monad transformers utilities.

## Synopsis

- usingReader :: r -> Reader r a -> a
- usingReaderT :: r -> ReaderT r m a -> m a
- etaReaderT :: ReaderT r m a -> ReaderT r m a
- evaluatingState :: s -> State s a -> a
- evaluatingStateT :: Functor f => s -> StateT s f a -> f a
- executingState :: s -> State s a -> s
- executingStateT :: Functor f => s -> StateT s f a -> f s
- usingState :: s -> State s a -> (a, s)
- usingStateT :: s -> StateT s m a -> m (a, s)
- hoistMaybe :: Applicative m => Maybe a -> MaybeT m a
- hoistEither :: Applicative m => Either e a -> ExceptT e m a

# Convenient functions to work with

`Reader`

monad

usingReader :: r -> Reader r a -> a Source #

Shorter and more readable alias for `flip runReader`

.

`>>>`

47`usingReader 42 $ asks (+5)`

usingReaderT :: r -> ReaderT r m a -> m a Source #

Shorter and more readable alias for `flip runReaderT`

.

`>>>`

47`usingReaderT 42 $ asks (+5)`

etaReaderT :: ReaderT r m a -> ReaderT r m a Source #

This function helps with optimizing performance when working with
the `ReaderT`

transformer. If you have code like below, that is
called in a loop

step :: Instruction ->`ReaderT`

Config IO Result step instruction =caseinstructionofAdd ->dostuff ... Del ->dostuff ...

you can improve performance of your Haskell applications by using
`etaReaderT`

in the following way:

step :: Instruction ->`ReaderT`

Config IO Result step instruction =`etaReaderT`

$caseinstructionofAdd ->dostuff ... Del ->dostuff ...

For a detailed explanation, refer to the following blog post:

*Since: 0.7.0.0*

# Convenient functions to work with

`State`

monad

evaluatingState :: s -> State s a -> a Source #

Alias for `flip evalState`

. It's not shorter but sometimes
more readable. Done by analogy with `using*`

functions family.

evaluatingStateT :: Functor f => s -> StateT s f a -> f a Source #

Alias for `flip evalStateT`

. It's not shorter but sometimes
more readable. Done by analogy with `using*`

functions family.

executingState :: s -> State s a -> s Source #

Alias for `flip execState`

. It's not shorter but sometimes
more readable. Done by analogy with `using*`

functions family.

executingStateT :: Functor f => s -> StateT s f a -> f s Source #

Alias for `flip execStateT`

. It's not shorter but sometimes
more readable. Done by analogy with `using*`

functions family.

usingState :: s -> State s a -> (a, s) Source #

Shorter and more readable alias for `flip runState`

.

usingStateT :: s -> StateT s m a -> m (a, s) Source #

Shorter and more readable alias for `flip runStateT`

.

`>>>`

(False,42)`usingStateT 0 $ put 42 >> pure False`

# Lifted to Transformers

hoistMaybe :: Applicative m => Maybe a -> MaybeT m a Source #

hoistEither :: Applicative m => Either e a -> ExceptT e m a Source #