Created: 2023-02-23 16:03
A Monad transformer takes a Monad and returns back a Monad with some extended capabilities. They could be called “Higher Order Monads”.
For example the MaybeT transformer adds the Maybe
capability to another Monad.
newtype MaybeT m a = MaybeT { runMaybeT :: m (Maybe a) }
This is clearly conveyed by the kind of MaybeT
:
ghci> :k MaybeT
MaybeT :: (* -> *) -> * -> *
Which could be written as:
MaybeT :: (* -> *) -> (* -> *)