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