disco-0.1.6: src/Disco/Effects/Random.hs
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- |
-- Module : Disco.Effects.Random
-- Copyright : disco team and contributors
-- Maintainer : byorgey@gmail.com
--
-- SPDX-License-Identifier: BSD-3-Clause
--
-- Utility functions for random effect.
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)
-- | Run a QuickCheck generator using a 'Random' effect.
runGen :: Member Random r => QC.Gen a -> Sem r a
runGen g = do
n <- random @_ @Int
w <- random @_ @Word64
return $ QC.unGen g (QCR.QCGen (SM.mkSMGen w)) n