packages feed

quickcheck-transformer 0.3 → 0.3.1

raw patch · 4 files changed

+98/−31 lines, 4 files

Files

quickcheck-transformer.cabal view
@@ -1,5 +1,5 @@ Name:          quickcheck-transformer-Version:       0.3+Version:       0.3.1 Synopsis:      A GenT monad transformer for QuickCheck library. Description:   A fork of QuickCheck-GenT that works for older GHC versions@@ -18,7 +18,7 @@   Source-Repository this-  Tag:         0.3+  Tag:         0.3.1   Type:        darcs   Location:    http://hub.darcs.net/thielema/quickcheck-transformer/ @@ -29,11 +29,18 @@  Library   Hs-Source-Dirs: src+  If impl(ghc>=8.8)+    Hs-Source-Dirs: src-fail/from-4.13/+  Else+    Hs-Source-Dirs: src-fail/before-4.13/   Exposed-Modules:     Test.QuickCheck.GenT+  Other-Modules:+    Test.QuickCheck.GenT.Private   Build-Depends:     QuickCheck >=2.7 && <3,     random >=1.0 && <1.2,     transformers >=0.5 && <0.6,     base >=4.3 && <5   Default-Language: Haskell2010+  GHC-Options: -Wall
+ src-fail/before-4.13/Test/QuickCheck/GenT/Private.hs view
@@ -0,0 +1,33 @@+module Test.QuickCheck.GenT.Private where++import qualified Test.QuickCheck.Random as QC+import qualified System.Random as Random++import Control.Monad.Trans.Class (MonadTrans, lift)+import Control.Monad.IO.Class (MonadIO, liftIO)+import Control.Monad (ap)+import Control.Applicative (Applicative, pure, (<*>))+++newtype GenT m a = GenT { unGenT :: QC.QCGen -> Int -> m a }++instance (Functor m) => Functor (GenT m) where+  fmap f m = GenT $ \r n -> fmap f $ unGenT m r n++instance (Monad m) => Monad (GenT m) where+  return a = GenT (\_ _ -> return a)+  m >>= k = GenT $ \r n -> do+    let (r1, r2) = Random.split r+    a <- unGenT m r1 n+    unGenT (k a) r2 n+  fail msg = GenT (\_ _ -> fail msg)++instance (Functor m, Monad m) => Applicative (GenT m) where+  pure = return+  (<*>) = ap++instance MonadTrans GenT where+  lift m = GenT (\_ _ -> m)++instance (MonadIO m) => MonadIO (GenT m) where+  liftIO = lift . liftIO
+ src-fail/from-4.13/Test/QuickCheck/GenT/Private.hs view
@@ -0,0 +1,34 @@+module Test.QuickCheck.GenT.Private where++import qualified Test.QuickCheck.Random as QC+import qualified System.Random as Random++import Control.Monad.Trans.Class (MonadTrans, lift)+import Control.Monad.IO.Class (MonadIO, liftIO)+import Control.Monad (ap)+++newtype GenT m a = GenT { unGenT :: QC.QCGen -> Int -> m a }++instance (Functor m) => Functor (GenT m) where+  fmap f m = GenT $ \r n -> fmap f $ unGenT m r n++instance (Monad m) => Monad (GenT m) where+  return a = GenT (\_ _ -> return a)+  m >>= k = GenT $ \r n -> do+    let (r1, r2) = Random.split r+    a <- unGenT m r1 n+    unGenT (k a) r2 n++instance (MonadFail m) => MonadFail (GenT m) where+  fail msg = GenT (\_ _ -> fail msg)++instance (Functor m, Monad m) => Applicative (GenT m) where+  pure = return+  (<*>) = ap++instance MonadTrans GenT where+  lift m = GenT (\_ _ -> m)++instance (MonadIO m) => MonadIO (GenT m) where+  liftIO = lift . liftIO
src/Test/QuickCheck/GenT.hs view
@@ -2,43 +2,36 @@ -- Most of the code is borrowed from -- <http://haskell.1045720.n5.nabble.com/darcs-patch-GenT-monad-transformer-variant-of-Gen-QuickCheck-2-td3172136.html a mailing list discussion>. -- Therefor, credits go to Paul Johnson and Felix Martini.-module Test.QuickCheck.GenT where+module Test.QuickCheck.GenT (+   GenT (GenT, unGenT),+   runGenT,+   MonadGen (liftGen, variant, sized, resize, choose),+   var,+   suchThat,+   suchThatMaybe,+   listOf,+   listOf1,+   vectorOf,+   oneof,+   frequency,+   elements,+   growingElements,+   oneofMay,+   elementsMay,+   growingElementsMay,+   ) where  import qualified Test.QuickCheck.Gen as QC import qualified Test.QuickCheck.Random as QC import qualified System.Random as Random -import Control.Monad.Trans.Class (MonadTrans, lift)-import Control.Monad.IO.Class (MonadIO, liftIO)-import Control.Monad (ap)-import Control.Applicative (Applicative, pure, (<*>), (<$>))+import Test.QuickCheck.GenT.Private (GenT(..)) +import Control.Applicative (Applicative, (<$>))+ import Data.Maybe (fromMaybe)  -newtype GenT m a = GenT { unGenT :: QC.QCGen -> Int -> m a }--instance (Functor m) => Functor (GenT m) where-  fmap f m = GenT $ \r n -> fmap f $ unGenT m r n--instance (Monad m) => Monad (GenT m) where-  return a = GenT (\_ _ -> return a)-  m >>= k = GenT $ \r n -> do-    let (r1, r2) = Random.split r-    a <- unGenT m r1 n-    unGenT (k a) r2 n-  fail msg = GenT (\_ _ -> fail msg)--instance (Functor m, Monad m) => Applicative (GenT m) where-  pure = return-  (<*>) = ap--instance MonadTrans GenT where-  lift m = GenT (\_ _ -> m)--instance (MonadIO m) => MonadIO (GenT m) where-  liftIO = lift . liftIO- runGenT :: GenT m a -> QC.Gen (m a) runGenT (GenT run) = QC.MkGen run @@ -180,5 +173,5 @@     where       k = length xs       mx = 100-      log' = round . log . fromIntegral+      log' = round . log . (id :: Double -> Double) . fromIntegral       size n = (log' n + 1) * k `div` log' mx