    {-# LANGUAGE RankNTypes, FlexibleInstances, MultiParamTypeClasses #-}
    module Data.Random.RVar
        ( RVar, runRVar
        , RVarT, runRVarT, runRVarTWith
        , RGen(..), uniformRVarT, uniformRangeRVarT
        ) where

    import Data.Random.Lift
    import Data.RVar hiding (runRVarT)
    import System.Random.Stateful

    -- |Like 'runRVarTWith', but using an implicit lifting (provided by the
    -- 'Lift' class)
    runRVarT :: (Lift n m, StatefulGen g m) => RVarT n a -> g -> m a
    runRVarT :: forall (n :: * -> *) (m :: * -> *) g a.
    (Lift n m, StatefulGen g m) =>
    RVarT n a -> g -> m a
    runRVarT = (forall t. n t -> m t) -> RVarT n a -> g -> m a
    forall (m :: * -> *) (n :: * -> *) g a.
    StatefulGen g m =>
    (forall t. n t -> m t) -> RVarT n a -> g -> m a
    runRVarTWith n t -> m t
    forall t. n t -> m t
    forall (m :: * -> *) (n :: * -> *) a. Lift m n => m a -> n a
    lift