{-# 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 (m :: * -> *) (n :: * -> *) g a.
StatefulGen g m =>
(forall t. n t -> m t) -> RVarT n a -> g -> m a
runRVarTWith forall (m :: * -> *) (n :: * -> *) a. Lift m n => m a -> n a
lift