Copyright | Copyright (c) 2010 Patrick Perry <patperry@gmail.com> |
---|---|
License | BSD3 |
Maintainer | Patrick Perry <patperry@gmail.com> |
Stability | experimental |
Safe Haskell | None |
Language | Haskell98 |
A type class for approximate and exact equalilty comparisons and instances for common data types.
Documentation
Types with approximate and exact equality comparisons.
(===) :: a -> a -> Bool infix 4 #
An exact equality comparison.
For real IEEE
types, two values are equivalent in the
following cases:
- both values are
+0
; - both values are
-0
; - both values are nonzero and equal to each other
(according to
==
); - both values are
NaN
with the same payload and sign.
For complex IEEE
types, two values are equivalent if their
real and imaginary parts are equivalent.
(~==) :: a -> a -> Bool infix 4 #
An approximate equality comparison operator.
For real IEEE
types, two values are approximately equal in the
following cases:
- at least half of their significand bits agree;
- both values are less than
epsilon
; - both values are
NaN
.
For complex IEEE
types, two values are approximately equal in the
followiing cases:
- their magnitudes are approximately equal and the angle between
them is less than
32*
;epsilon
- both magnitudes are less than
epsilon
; - both have a
NaN
real or imaginary part.
Admitedly, the 32
is a bit of a hack. Future versions of the
library may switch to a more principled test of the angle.
AEq Bool # | |
AEq Char # | |
AEq Double # | |
AEq Float # | |
AEq Int # | |
AEq Int8 # | |
AEq Int16 # | |
AEq Int32 # | |
AEq Int64 # | |
AEq Integer # | |
AEq Ordering # | |
AEq Word # | |
AEq Word8 # | |
AEq Word16 # | |
AEq Word32 # | |
AEq Word64 # | |
AEq () # | |
AEq WordPtr # | |
AEq IntPtr # | |
AEq CChar # | |
AEq CSChar # | |
AEq CUChar # | |
AEq CShort # | |
AEq CUShort # | |
AEq CInt # | |
AEq CUInt # | |
AEq CLong # | |
AEq CULong # | |
AEq CLLong # | |
AEq CULLong # | |
AEq CFloat # | |
AEq CDouble # | |
AEq CPtrdiff # | |
AEq CSize # | |
AEq CWchar # | |
AEq CSigAtomic # | |
AEq CClock # | |
AEq CTime # | |
AEq CIntPtr # | |
AEq CUIntPtr # | |
AEq CIntMax # | |
AEq CUIntMax # | |
AEq a => AEq [a] # | |
AEq a => AEq (Maybe a) # | |
AEq (StablePtr a) # | |
AEq (Ptr a) # | |
AEq (FunPtr a) # | |
AEq (Complex Double) # | |
AEq (Complex Float) # | |
AEq (Complex CFloat) # | |
AEq (Complex CDouble) # | |
AEq (ForeignPtr a) # | |
(AEq a, AEq b) => AEq (Either a b) # | |
(AEq a, AEq b) => AEq (a, b) # | |
(AEq a, AEq b, AEq c) => AEq (a, b, c) # | |
(AEq a, AEq b, AEq c, AEq d) => AEq (a, b, c, d) # | |
(AEq a, AEq b, AEq c, AEq d, AEq e) => AEq (a, b, c, d, e) # | |
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f) => AEq (a, b, c, d, e, f) # | |
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g) => AEq (a, b, c, d, e, f, g) # | |
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h) => AEq (a, b, c, d, e, f, g, h) # | |
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h, AEq i) => AEq (a, b, c, d, e, f, g, h, i) # | |
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h, AEq i, AEq j) => AEq (a, b, c, d, e, f, g, h, i, j) # | |
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h, AEq i, AEq j, AEq k) => AEq (a, b, c, d, e, f, g, h, i, j, k) # | |
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h, AEq i, AEq j, AEq k, AEq l) => AEq (a, b, c, d, e, f, g, h, i, j, k, l) # | |
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h, AEq i, AEq j, AEq k, AEq l, AEq m) => AEq (a, b, c, d, e, f, g, h, i, j, k, l, m) # | |
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h, AEq i, AEq j, AEq k, AEq l, AEq m, AEq n) => AEq (a, b, c, d, e, f, g, h, i, j, k, l, m, n) # | |
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h, AEq i, AEq j, AEq k, AEq l, AEq m, AEq n, AEq o) => AEq (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) # | |