packages feed

quickcheck-dynamic-3.0.0: src/Test/QuickCheck/Extras.hs

module Test.QuickCheck.Extras where

import Control.Monad.Reader
import Control.Monad.State
import Test.QuickCheck.Monadic

runPropertyStateT :: Monad m => PropertyM (StateT s m) a -> s -> PropertyM m (a, s)
runPropertyStateT p s0 = MkPropertyM $ \k -> do
  m <- unPropertyM (do a <- p; s <- run get; return (a, s)) $ fmap lift . k
  return $ evalStateT m s0

runPropertyReaderT :: Monad m => PropertyM (ReaderT e m) a -> e -> PropertyM m a
runPropertyReaderT p e = MkPropertyM $ \k -> do
  m <- unPropertyM p $ fmap lift . k
  return $ runReaderT m e