Num -package:base-prelude -package:LambdaHack package:base
Basic numeric class.
The Haskell Report defines no laws for
Num. However,
(+) and
(*) are customarily expected
to define a ring and have the following properties:
- Associativity of (+) (x + y) +
z = x + (y + z)
- Commutativity of (+) x + y
= y + x
- fromInteger 0 is the additive
identity x + fromInteger 0 = x
- negate gives the additive inverse x +
negate x = fromInteger 0
- Associativity of (*) (x * y) *
z = x * (y * z)
- fromInteger 1 is the multiplicative
identity x * fromInteger 1 = x and
fromInteger 1 * x = x
- Distributivity of (*) with respect to
(+) a * (b + c) = (a * b) + (a *
c) and (b + c) * a = (b * a) + (c * a)
- Coherence with toInteger if the type also
implements Integral, then fromInteger is a left inverse
for toInteger, i.e. fromInteger (toInteger i) ==
i
Note that it
isn't customarily expected that a type instance of
both
Num and
Ord implement an ordered ring. Indeed, in
base only
Integer and
Rational do.
Odds and ends, mostly functions for reading and showing
RealFloat-like kind of values.
Extract the numerator of the ratio in reduced form: the numerator and
denominator have no common factor and the denominator is positive.
The number of elements in the array.
the value passed to the
+RTS -N flag. This is the number of
Haskell threads that can run truly simultaneously at any given time,
and is typically set to the number of physical processor cores on the
machine.
Strictly speaking it is better to use
getNumCapabilities,
because the number of capabilities might vary at runtime.
Returns the number of sparks currently in the local spark pool
Returns the number of sparks in the local spark pool.
Class
Enum defines operations on sequentially ordered types.
The
enumFrom... methods are used in Haskell's translation of
arithmetic sequences.
Instances of
Enum may be derived for any enumeration type
(types whose constructors have no fields). The nullary constructors
are assumed to be numbered left-to-right by
fromEnum from
0 through
n-1. See Chapter 10 of the
Haskell
Report for more details.
For any type that is an instance of class
Bounded as well as
Enum, the following should hold:
enumFrom x = enumFromTo x maxBound
enumFromThen x y = enumFromThenTo x y bound
where
bound | fromEnum y >= fromEnum x = maxBound
| otherwise = minBound
Used in Haskell's translation of
[n..] with
[n..] =
enumFrom n, a possible implementation being
enumFrom n = n :
enumFrom (succ n). For example:
enumFrom 4 :: [Integer] = [4,5,6,7,...]
enumFrom 6 :: [Int] = [6,7,8,9,...,maxBound ::
Int]
Used in Haskell's translation of
[n,n'..] with
[n,n'..] =
enumFromThen n n', a possible implementation being
enumFromThen n n' = n : n' : worker (f x) (f x n'),
worker s v = v : worker s (s v),
x = fromEnum n' -
fromEnum n and
f n y | n > 0 = f (n - 1) (succ y) | n <
0 = f (n + 1) (pred y) | otherwise = y For example:
enumFromThen 4 6 :: [Integer] = [4,6,8,10...]
enumFromThen 6 2 :: [Int] = [6,2,-2,-6,...,minBound ::
Int]