concrete functor and monad transformers
#70Generalise ContT type sigantures to Applicative
If we write evalContT m = runContT m pure
then the type signature can become more general: evalContT :: Applicative m => ContT r m r -> m r
. Subsequently shiftT
can have its constraint weakened to Applicative m
.