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