module Disco.Effects.Random (
module Polysemy.Random,
runGen,
)
where
import Polysemy
import Polysemy.Random
import qualified System.Random.SplitMix as SM
import qualified Test.QuickCheck.Gen as QC
import qualified Test.QuickCheck.Random as QCR
import Data.Word (Word64)
runGen :: Member Random r => QC.Gen a -> Sem r a
runGen :: forall (r :: EffectRow) a. Member Random r => Gen a -> Sem r a
runGen Gen a
g = do
Int
n <- forall (r :: EffectRow) x. (Member Random r, Random x) => Sem r x
random @_ @Int
Word64
w <- forall (r :: EffectRow) x. (Member Random r, Random x) => Sem r x
random @_ @Word64
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ forall a. Gen a -> QCGen -> Int -> a
QC.unGen Gen a
g (SMGen -> QCGen
QCR.QCGen (Word64 -> SMGen
SM.mkSMGen Word64
w)) Int
n