leancheck-0.9.2: src/Test/LeanCheck/Function/Show.hs
-- |
-- Module : Test.LeanCheck.Function.Show
-- Copyright : (c) 2015-2020 Rudy Matela
-- License : 3-Clause BSD (see the file LICENSE)
-- Maintainer : Rudy Matela <rudy@matela.com.br>
--
-- 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 'Test.LeanCheck.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 'Test.LeanCheck.Function.ShowFunction.ShowFunction'.
-- For user-defined algebraic datatypes that are instances of 'Show', their
-- ShowFunction instance can be defined by using
-- 'Test.LeanCheck.Function.ShowFunction.bindtiersShow':
--
-- > import Test.LeanCheck.Function.ShowFunction
-- >
-- > instance ShowFunction Ty where
-- > bindtiers = bindtiersShow
module Test.LeanCheck.Function.Show () where
import Test.LeanCheck.Function.Show.EightLines ()