Define chained operators, for ease of entering expressions like 1 < 2 < 3.
This module defines three extra variations of each of the operators <
,
<=
, and ==
, for use at the beginning, middle, and end of such chains.
These operators have dots on the inside of the chain, for instance:
x <. y .< z 1 <. 2 .<. 3 .<=. 3 .< 4 square (0,0) ==. square (0,1) .== square (0,2)
These operators are defined to be left-associative and the same precedence as the ordinary comparison operators.
Defines instances of Show
, Eq
, and Ord
for functions.
Limitations:
Bool
). The module defines a Finite
class for types where all possible values of the type can be listed in a finite list, and defines function equality in terms of that class.
==
is undefined in those cases)
(&&) == flip (&&)
gives True
, even
though they give different results if one of the inputs is undefined
const (0/0) /= const (0/0)
(since NaN ≠ NaN), and if infinite lists (or similar) are
returned from both functions, (==)
will enter an infinite loop.
()
, which could give surprising results, e.g.,
typing (==) == const (const True)
in ghci will show True
, because it
assumes (==) :: () -> () -> Bool
(which is always true)
Also provides an inverse
function which can invert certain functions