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.
Methods
lift :: m a -> n a
Instances5Lift
Monad m => Lift Identity mDefined in random-fu-0.3.0.1 · Data.Random.LiftThis instance is incoherent with the others. However, by the law
lift (return x) == return x, the results must always be the same.Lift m mDefined in random-fu-0.3.0.1 · Data.Random.LiftMonadTrans t => Lift Identity (t Identity)Defined in random-fu-0.3.0.1 · Data.Random.LiftThis instance is again incoherent with the others, but provides a more-specific instance to resolve the overlap between the
Lift m (t m)andLift Identity minstances.(Monad m, MonadTrans t) => Lift m (t m)Defined in random-fu-0.3.0.1 · Data.Random.LiftLift (RVarT Identity) (RVarT m)Defined in random-fu-0.3.0.1 · Data.Random.Lift