Portability | unportable (GHC only) |
---|---|
Stability | unstable |
Maintainer | Alexey Khudyakov <alexey.skladnoy@gmail.com> |
Safe Haskell | Safe-Inferred |
This module contain interface type classes for operations with type level numbers.
- type family Compare n m :: *
- compareN :: n -> m -> Compare n m
- data IsLesser
- data IsEqual
- data IsGreater
- class Lesser n m
- class LesserEq n m
- class Greater n m
- class GreaterEq n m
- class Positive n
- class NonZero n
- type family Next n :: *
- nextN :: n -> Next n
- type family Prev n :: *
- prevN :: n -> Prev n
- type family Negate n :: *
- negateN :: n -> Negate n
- type family Add n m :: *
- addN :: n -> m -> Add n m
- type family Sub n m :: *
- subN :: n -> m -> Sub n m
- type family Mul n m :: *
- mulN :: n -> m -> Mul n m
- type family Div n m :: *
- divN :: n -> m -> Div n m
- type family Normalized n :: *
Comparison of numbers
type family Compare n m :: *Source
Type family for comparing two numbers. It's expected that for any
two valid n
and m
'Compare n m' is equal to IsLess when 'n<m', IsEqual
when 'n=m' and IsGreater when 'n>m'.
Data labels for types comparison
Specialized type classes
These type classes are meant to be used in contexts to ensure relations between numbers. For example:
someFunction :: Lesser n m => Data n -> Data m -> Data n someFunction = ...
They have generic instances and every number which is instance of Compare type family is instance of these type classes.
These instance could have problems. They weren't exensively tested. Also error messages are really unhelpful.
Numbers n and m are instances of this class if and only is n < m.
Numbers n and m are instances of this class if and only is n <= m.
Numbers n and m are instances of this class if and only is n > m.
Numbers n and m are instances of this class if and only is n >= m.
Special traits
Non-zero number. For naturals it's same as positive
Arithmetic operations on numbers
type family Div n m :: *Source
Division of two numbers. n
and m
should be instances of this
class only if remainder of 'n/m' is zero.
Special classes
type family Normalized n :: *Source
Usually numbers have non-unique representation. This type family is canonical representation of number.