úΆJ5A multi-level lift through a monad transformer stack.(C) 2015 by Brian Hurt BSD 2-ClauseBrian Hurt <bhurt42@gmail.com> experimentalsafe Safe-Inferred246A multi-level lifter class.&The existance of an implementation of MonadStack m n, implies that is is possible to convert an m a into an n a# via zero or more applications of lift.!The inductive step implementation%If there exists an implementation of MonadStack k m for monads k and m (that is, we can perform a liftFrom to convert a k a to a m aM), and n is a monad transformer, then we can construct an implementation of MonadStack k (n m), by just adding one more lift to the liftFrom.The base case implementationYou can always convert an m a into an m a1 by applying 0 lifts. This is like treating an m ag as a zero-level monad transformer stack (a monad transformer stack with no monad transformers), and liftFrom is just the id function.MonadStack-0.1.0.3Control.Monad.MonadStack MonadStackliftFrom$fMonadStackkn$fMonadStackmm