Portability | Haskell 98 |
---|---|

Stability | stable |

Maintainer | haskell@henning-thielemann.de |

A type class for non-negative numbers.
Prominent instances are `Numeric.NonNegative.Wrapper.T`

and peano numbers.
This class cannot do any checks,
but it let you show to the user what arguments your function expects.
In fact many standard functions (`take`

, '(!!)', ...)
should have this type class constraint.
Thus you must define class instances with care.

# Documentation

class (Ord a, C a) => C a whereSource

Instances of this class must ensure non-negative values.
We cannot enforce this by types, but the type class constraint `NonNegative.C`

avoids accidental usage of types which allow for negative numbers.

x -| y == max 0 (x-y)

The default implementation is not efficient,
because it compares the values and then subtracts, again, if safe.
`max 0 (x-y)`

is more elegant and efficient
but not possible in the general case,
since `x-y`

may already yield a negative number.