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 :: (* -> *) -> (* -> *)