Conversion of values to readable Strings. Derived instances of Show have the following properties, which are compatible with derived instances of Read:
  • The result of show is a syntactically correct Haskell expression containing only constants, given the fixity declarations in force at the point where the type is declared. It contains only the constructor names defined in the data type, parentheses, and spaces. When labelled constructor fields are used, braces, commas, field names, and equal signs are also used.
  • If the constructor is defined to be an infix operator, then showsPrec will produce infix applications of the constructor.
  • the representation will be enclosed in parentheses if the precedence of the top-level constructor in x is less than d (associativity is ignored). Thus, if d is 0 then the result is never surrounded in parentheses; if d is 11 it is always surrounded in parentheses, unless it is an atomic expression.
  • If the constructor is defined using record syntax, then show will produce the record-syntax form, with the fields given in the same order as the original declaration.
For example, given the declarations
infixr 5 :^:
data Tree a =  Leaf a  |  Tree a :^: Tree a
the derived instance of Show is equivalent to
instance (Show a) => Show (Tree a) where

showsPrec d (Leaf m) = showParen (d > app_prec) $
showString "Leaf " . showsPrec (app_prec+1) m
where app_prec = 10

showsPrec d (u :^: v) = showParen (d > up_prec) $
showsPrec (up_prec+1) u .
showString " :^: "      .
showsPrec (up_prec+1) v
where up_prec = 5
Note that right-associativity of :^: is ignored. For example,
  • show (Leaf 1 :^: Leaf 2 :^: Leaf 3) produces the string "Leaf 1 :^: (Leaf 2 :^: Leaf 3)".
Converting values to readable strings: the Show class and associated functions.
The Show class, and related operations.
Support for creating Show instances using the accessors.
Show and Read properties
Convert a physical value to a human readable string.
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
Generic implementation of Show


This is an internal module: it is not subject to any versioning policy, breaking changes can happen at any time. If something here seems useful, please report it or create a pull request to export it from an external module.
Show and Read properties
This module defines showing of (higher-order) signatures, which lifts to showing of (higher-order) terms and contexts. All definitions are generalised versions of those in Data.Comp.Show.
This module defines showing of signatures, which lifts to showing of terms and contexts.