HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

ModuleQuickCheck-2.15.0.1Haskell2010

Test.QuickCheck.Gen

Test case generation.

Note: the contents of this module (except for the definition of Gen) are re-exported by Test.QuickCheck. You probably do not need to import it directly.

  • 1 type
  • 32 values

Generator type

1 declaration
newtypenewtype Gen a
#

A generator for values of type a.

The third-party packages QuickCheck-GenT and quickcheck-transformer provide monad transformer versions of Gen.

Constructors

  • MkGen
    • unGen :: QCGen -> Int -> a

      Run the generator on a particular seed and size. If you just want to get a random value out, consider using generate.

Instances5Monad, Functor, MonadFix, Applicative, Testable
  • Monad GenDefined in QuickCheck-2.15.0.1 · Test.QuickCheck.Gen
  • Functor GenDefined in QuickCheck-2.15.0.1 · Test.QuickCheck.Gen
  • MonadFix GenDefined in QuickCheck-2.15.0.1 · Test.QuickCheck.Gen
  • Applicative GenDefined in QuickCheck-2.15.0.1 · Test.QuickCheck.Gen
  • Testable prop => Testable (Gen prop)Defined in QuickCheck-2.15.0.1 · Test.QuickCheck.Property

Primitive generator combinators

17 declarations
valuesized :: (Int -> Gen a) -> Gen a
#

Used to construct generators that depend on the size parameter.

For example, listOf, which uses the size parameter as an upper bound on length of lists it generates, can be defined like this:

listOf :: Gen a -> Gen [a]
listOf gen = sized $ \n ->
  do k <- choose (0,n)
     vectorOf k gen

You can also do this using getSize.

valuegetSize :: Gen Int
#

Returns the size parameter. Used to construct generators that depend on the size parameter.

For example, listOf, which uses the size parameter as an upper bound on length of lists it generates, can be defined like this:

listOf :: Gen a -> Gen [a]
listOf gen = do
  n <- getSize
  k <- choose (0,n)
  vectorOf k gen

You can also do this using sized.

valueresize :: HasCallStack => Int -> Gen a -> Gen a
#

Overrides the size parameter. Returns a generator which uses the given size instead of the runtime-size parameter.

valuescale :: (Int -> Int) -> Gen a -> Gen a
#

Adjust the size parameter, by transforming it with the given function.

valuechoose :: Random a => (a, a) -> Gen a
#

Generates a random element in the given inclusive range. For integral and enumerated types, the specialised variants of choose below run much quicker.

valuechooseAny :: Random a => Gen a
#

Generates a random element over the natural range of a.

valuegenerate :: Gen a -> IO a
#

Run a generator. The size passed to the generator is always 30; if you want another size then you should explicitly use resize.

valuesample' :: Gen a -> IO [a]
#

Generates some example values.

valuesample :: Show a => Gen a -> IO ()
#

Generates some example values and prints them to stdout.

Floating point

2 declarations

Common generator combinators

13 declarations
valuesuchThat :: Gen a -> (a -> Bool) -> Gen a
#

Generates a value that satisfies a predicate.

valuesuchThatMap :: Gen a -> (a -> Maybe b) -> Gen b
#

Generates a value for which the given function returns a Just, and then applies the function.

valuesuchThatMaybe :: Gen a -> (a -> Bool) -> Gen (Maybe a)
#

Tries to generate a value that satisfies a predicate. If it fails to do so after enough attempts, returns Nothing.

valueoneof :: HasCallStack => [Gen a] -> Gen a
#

Randomly uses one of the given generators. The input list must be non-empty.

valuefrequency :: HasCallStack => [(Int, Gen a)] -> Gen a
#

Chooses one of the given generators, with a weighted random distribution. The input list must be non-empty.

valuesublistOf :: [a] -> Gen [a]
#

Generates a random subsequence of the given list.

valueshuffle :: [a] -> Gen [a]
#

Generates a random permutation of the given list.

valuegrowingElements :: HasCallStack => [a] -> Gen a
#

Takes a list of elements of increasing size, and chooses among an initial segment of the list. The size of this initial segment increases with the size parameter. The input list must be non-empty.

valuelistOf :: Gen a -> Gen [a]
#

Generates a list of random length. The maximum length depends on the size parameter.

valuelistOf1 :: Gen a -> Gen [a]
#

Generates a non-empty list of random length. The maximum length depends on the size parameter.