A class for "liftable" data structures. Conceptually an extension of
MonadTrans to allow deep lifting, but lifting need not be done
between monads only. Eg lifting between
Applicatives is
allowed.
For instances where
m and
n have
return/
pure defined, these instances must satisfy
lift (return x) == return x.
This form of
lift has an extremely general type and is used
primarily to support
sample. Its excessive generality is the
main reason it's not exported from
Data.Random.
RVarT
is, however, an instance of
MonadTrans, which in most cases is
the preferred way to do the lifting.