LeanCheck
 
 
 

This package extends LeanCheck by providing Listable instances for common types provided by the
Haskell Platform.
This package is to LeanCheck what quickcheck-instances is to QuickCheck.
The current objective is to include all types supported by quickcheck-instances.
Installing
To install the latest leancheck-instances version from Hackage, just run:
$ cabal update
$ cabal install leancheck-instances
Examples
Importing the library:
> import Test.LeanCheck
> import Test.LeanCheck.Instances
Checking properties of Text:
> import qualified Data.Text as T
> check $ \t -> T.reverse (T.reverse t) == t
+++ OK, passed 200 tests.
> check $ \t -> T.reverse t == t
*** Failed! Falsifiable (after 6 tests):
"a "
Enumerating Maps:
> import Data.Map
> list :: [Map Bool Bool]
[ fromList []
, fromList [(False,False)]
, fromList [(False,True)]
, fromList [(True,False)]
, fromList [(True,True)]
, fromList [(False,False),(True,False)]
, fromList [(False,False),(True,True)]
, fromList [(False,True),(True,False)]
, fromList [(False,True),(True,True)]
]
> take 7 $ list :: [Map Int Int]
[ fromList []
, fromList [(0,0)]
, fromList [(0,1)]
, fromList [(1,0)]
, fromList [(0,-1)]
, fromList [(1,1)]
, fromList [(0,0),(1,0)]
]
Adding more instances
Although the current objective is to include all types supported by
quickcheck-instances, leancheck-instances only has about 10% of what is
needed.  Any help with new instances to increase that percentage will be
appreciated.
This section provides a quick guide on how to add new instances.
- 
Choose the type to support
Compare the instances provided on quickcheck-instances and
leancheck-instances and choose any that has not been added to
leancheck-instances yet. 
- 
Create the module file if needed
If needed, create a module that will contain your instance following the
same structure in quickcheck-instances: $ cat > src/Test/LeanCheck/Instances/Something.hs
-- |
-- Module      : Test.LeanCheck.Instances.Containers
-- Copyright   : (c) 2019 Authors of leancheck-instances
-- License     : 3-Clause BSD  (see the file LICENSE)
-- Maintainer  : Rudy Matela <rudy@matela.com.br>
--
-- 'Listable' something.
module Test.LeanCheck.Instances.Something () where
import Test.LeanCheck
import Something
^D
 Remember to: 
- 
Import your newly created module on src/Test/LeanCheck/Instances.hs
 
- 
Add your newly created module to the exposed-moduleslist inleancheck-instances.cabal.
 
- 
You may need to add a package dependency to build-dependsonleancheck-instances.cabal.
 
- 
(Optionally) run make dependto update themk/depend.mkfile.
 
 
- 
Create your instance
Open the relevant module with your favourite text editor and add your
instance: instance ... => Listable Something where
  ...
 Check the existing modules and the Listabletypeclass documentation for
how to create one.
 Make sure your instance builds with cabal build.
 
- 
Create tests
Go into tests/main.hsand add two properties exercising your type, one
thatholdsand one thatfails.  Make sure the tests pass by runningcabal test.
 
- 
(Optional) Add diff-tests 
- on bench/tiers.hsadd an entry for your type;
- add two matching entries on the diff-test-tiersandupdate-diff-test-tiersMakefile targets.
- run make update-diff-testto generate the reference output file.
- run make testjust to make sure the test is working.
 
- 
Submit a Pull Request
Then submit a pull request on GitHub and wait for your build to pass.
Alternatively, send a patch via e-mail. 
Further reading / see also