random-fu-0.3.0.1: Random number generation

Safe Haskell | Safe-Inferred
Language | Haskell2010

Data.Random.Lift

Synopsis

- class Lift (m :: Type -> Type) (n :: Type -> Type) where
  - lift :: m a -> n a

# Documentation

class Lift (m :: Type -> Type) (n :: Type -> Type) 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 `Applicative`s 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

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 #
Lift m m Source # |
Instance details Defined in Data.Random.Lift Methods lift :: m a -> 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 #
(Monad m, MonadTrans t) => Lift m (t m) Source # |
Instance details Defined in Data.Random.Lift Methods lift :: m a -> t m a Source #
Lift (RVarT Identity) (RVarT m) Source # |
Instance details Defined in Data.Random.Lift Methods lift :: RVarT Identity a -> RVarT m a Source #