The quickcheck-arbitrary-template package

[ Tags: bsd3, library, testing ] [ Propose Tags ]

Building Sum Type arbitrary instance is kind of a pain. This tool helps automate the process.

[Skip to Readme]


Change log
Dependencies base (==4.*), QuickCheck, safe, template-haskell (>=2.11 && <2.13) [details]
License BSD3
Copyright 2016-2018 Plow Technologies
Author Scott Murphy <>
Maintainer Scott Murphy <>
Category Testing
Home page
Bug tracker
Source repo head: git clone
Uploaded Wed Feb 7 02:59:35 UTC 2018 by mchaver
Distributions NixOS:
Downloads 25 total (25 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2018-02-07 [all 1 reports]
Hackage Matrix CI




Maintainer's Corner

For package maintainers and hackage trustees

Readme for quickcheck-arbitrary-template-

[back to package description]



contains one routine: makeArbitrary

Which builds, a generator that can be used to create an arbitrary instance.

It does not create the instance directly for you.

It supports creating sum types and record types each constructor may have at most 7 arguments.


stack build


An example (from the tests)

{-# LANGUAGE TemplateHaskell #-}
module Test.QuickCheck.TH.GeneratorsSpec (tests) where

import Test.QuickCheck.TH.Generators

import Test.Tasty
import Test.Tasty.QuickCheck as QC
import Test.Tasty.HUnit

import Data.List
import Data.Ord

-- | These example types should build arbitrary instances correctly 

data ExampleSumTypes = ExampleSum0 
                    | ExampleSum1 Int
                    | ExampleSum2 Int Int
                    | ExampleSum3 Int Int Int
                    | ExampleSum4 Int Int Int Int
                    | ExampleSum5  Int Int Int Int Int
                    | ExampleSum6 Int Int Int Int Int Int
                    | ExampleSum7 Int Int Int Int Int Int
 deriving (Show,Ord,Eq)

makeArbitrary ''ExampleSumTypes

instance Arbitrary ExampleSumTypes where
  arbitrary = arbitraryExampleSumTypes

tests :: TestTree
tests = testGroup "Tests" [properties]

properties :: TestTree
properties = testGroup "Properties" [qcProps]

qcProps = testGroup "(checked by QuickCheck)"
  [ QC.testProperty "sort == sort . reverse" (
       \list -> sort (list :: [ExampleSumTypes]) == sort (reverse list)) ]

How to run tests

stack test quickcheck-arbitrary-template