random-fu-0.3.0.0: Random number generation
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Random.Lift

Synopsis

Documentation

class Lift m n where Source #

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 Source #

Instances

Instances details
Lift m m Source # 
Instance details

Defined in Data.Random.Lift

Methods

lift :: m a -> m a Source #

Monad m => Lift Identity m Source #

This instance is incoherent with the others. However, by the law lift (return x) == return x, the results must always be the same.

Instance details

Defined in Data.Random.Lift

Methods

lift :: Identity a -> m a Source #

(Monad m, MonadTrans t) => Lift m (t m) Source # 
Instance details

Defined in Data.Random.Lift

Methods

lift :: m a -> t m a Source #

MonadTrans t => Lift Identity (t Identity) Source #

This instance is again incoherent with the others, but provides a more-specific instance to resolve the overlap between the Lift m (t m) and Lift Identity m instances.

Instance details

Defined in Data.Random.Lift

Methods

lift :: Identity a -> t Identity a Source #

Lift (RVarT Identity) (RVarT m) Source # 
Instance details

Defined in Data.Random.Lift

Methods

lift :: RVarT Identity a -> RVarT m a Source #