module FlexTask.GenUtil (
  fromGen,
  ) where


import Control.Monad.Random             (MonadRandom(getRandom))
import Test.QuickCheck.Gen              (Gen(unGen))
import Test.QuickCheck.Random           (mkQCGen)



{- |
Convert a QuickCheck generator into a member of MonadRandom.
-}
fromGen :: MonadRandom m => Gen a -> m a
fromGen :: forall (m :: * -> *) a. MonadRandom m => Gen a -> m a
fromGen Gen a
gen = do
  Int
seed <- m Int
forall a. Random a => m a
forall (m :: * -> *) a. (MonadRandom m, Random a) => m a
getRandom
  a -> m a
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (a -> m a) -> a -> m a
forall a b. (a -> b) -> a -> b
$ Gen a -> QCGen -> Int -> a
forall a. Gen a -> QCGen -> Int -> a
unGen Gen a
gen (Int -> QCGen
mkQCGen Int
seed) Int
30