leancheck-1.0.2: Enumerative property-based testing
Copyright(c) 2015-2024 Rudy Matela
License3-Clause BSD (see the file LICENSE)
MaintainerRudy Matela <rudy@matela.com.br>
Safe HaskellSafe-Inferred
LanguageHaskell2010

Test.LeanCheck.Function.Show.EightLines

Description

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.

Please see Test.LeanCheck.Function.Show.FourCases for an alternative that shows functions as up to 4 case distinctions in a single line.

The Show -> instance only works for functions of which ultimate return types are instances of the ShowFunction typeclass. Please see Test.LeanCheck.Function.ShowFunction for how to define these instances for your user-defined algebraic datatypes.

Warning: this is only intended to be used in testing modules. Avoid importing this on modules that are used as libraries.

Orphan instances

(Show a, Listable a, ShowFunction b) => Show (a -> b) Source #

A multi-line show instance for functions.

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
        ...
Instance details

Methods

showsPrec :: Int -> (a -> b) -> ShowS #

show :: (a -> b) -> String #

showList :: [a -> b] -> ShowS #