Copyright | (c) 2015-2020 Rudy Matela |
---|---|
License | 3-Clause BSD (see the file LICENSE) |
Maintainer | Rudy Matela <rudy@matela.com.br> |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
This module is part of LeanCheck, a simple enumerative property-based testing library.
This module exports an orphan Show
instance for functions.
It shows functions as up to 8 case distinctions, one per line.
Warning: this is only intended to be used in testing modules. Avoid importing this on modules that are used as libraries.
This is intended to Show
functions
generated by the Listable
instance for functions
defined in Test.LeanCheck.Function.Listable:
functions that have finite exceptions to a constant function.
It does work on other types of functions, albeit using "..."
.
> print (&&) \x y -> case (x,y) of (True,True) -> True _ -> False
> print (==>) \x y -> case (x,y) of (True,False) -> False _ -> True
> print (==2) \x -> case x of 2 -> True _ -> False
> print (\x -> abs x < 2) \x -> case x of 0 -> True 1 -> True -1 -> True _ -> False
When the function cannot be defined by finite exceptions to a constant
function using 8 case-patterns, the rest of the function is represented by
"..."
.
> print (+) \x y -> case (x,y) of (0,0) -> 0 (0,1) -> 1 (1,0) -> 1 (0,-1) -> -1 (1,1) -> 2 (-1,0) -> -1 (0,2) -> 2 (1,-1) -> 0 ...
The exported orphan Show
->
instance is actually defined in
Test.LeanCheck.Function.Show.EightLines. An alternative is provided in
Test.LeanCheck.Function.Show.FourCases.
The exported Show
instance only works for functions whose ultimate return
types are instances of ShowFunction
.
For user-defined algebraic datatypes that are instances of Show
, their
ShowFunction instance can be defined by using
bindtiersShow
:
import Test.LeanCheck.Function.ShowFunction instance ShowFunction Ty where bindtiers = bindtiersShow