License | BSD-style |
---|---|
Maintainer | Vincent Hanquez <[email protected]> |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Foundation.Numerical
Description
Compared to the Haskell hierarchy of number classes this provide a more flexible approach that is closer to the mathematical foundation (group, field, etc)
This try to only provide one feature per class, at the expense of the number of classes.
Synopsis
- class (Integral a, Eq a, Ord a) => IsIntegral a where
- class IsIntegral a => IsNatural a where
- class Signed a where
- class Additive a where
- class Subtractive a where
- type Difference a
- (-) :: a -> a -> Difference a
- class Multiplicative a where
- class (Additive a, Multiplicative a) => IDivisible a where
- class Multiplicative a => Divisible a where
- (/) :: a -> a -> a
- data Sign
- recip :: Divisible a => a -> a
- class IntegralRounding a where
- roundUp :: Integral n => a -> n
- roundDown :: Integral n => a -> n
- roundTruncate :: Integral n => a -> n
- roundNearest :: Integral n => a -> n
- class FloatingPoint a where
- floatRadix :: Proxy a -> Integer
- floatDigits :: Proxy a -> Int
- floatRange :: Proxy a -> (Int, Int)
- floatDecode :: a -> (Integer, Int)
- floatEncode :: Integer -> Int -> a
Documentation
class (Integral a, Eq a, Ord a) => IsIntegral a where #
Number literals, convertible through the generic Integer type.
all number are Enum'erable, meaning that you can move to next element
Instances
class IsIntegral a => IsNatural a where #
Non Negative Number literals, convertible through the generic Natural type
Instances
types that have sign and can be made absolute
Represent class of things that can be added together, contains a neutral element and is commutative.
x + azero = x azero + x = x x + y = y + x
Methods
Instances
class Subtractive a where #
Represent class of things that can be subtracted.
Note that the result is not necessary of the same type as the operand depending on the actual type.
For example:
(-) :: Int -> Int -> Int (-) :: DateTime -> DateTime -> Seconds (-) :: Ptr a -> Ptr a -> PtrDiff (-) :: Natural -> Natural -> Maybe Natural
Associated Types
type Difference a #
Methods
(-) :: a -> a -> Difference a infixl 6 #
Instances
class Multiplicative a where #
Represent class of things that can be multiplied together
x * midentity = x midentity * x = x
Methods
Identity element over multiplication
Multiplication of 2 elements that result in another element
(^) :: (IsNatural n, Enum n, IDivisible n) => a -> n -> a infixr 8 #
Raise to power, repeated multiplication e.g. > a ^ 2 = a * a > a ^ 10 = (a ^ 5) * (a ^ 5) .. (^) :: (IsNatural n) => a -> n -> a
Instances
Multiplicative Word128 | |
Multiplicative Word256 | |
Multiplicative CChar | |
Multiplicative CClock | |
Multiplicative CDouble | |
Multiplicative CFloat | |
Multiplicative CInt | |
Multiplicative CIntMax | |
Multiplicative CIntPtr | |
Multiplicative CLLong | |
Multiplicative CLong | |
Multiplicative CPtrdiff | |
Multiplicative CSChar | |
Multiplicative CSUSeconds | |
Defined in Basement.Numerical.Multiplicative Methods midentity :: CSUSeconds # (*) :: CSUSeconds -> CSUSeconds -> CSUSeconds # (^) :: (IsNatural n, Enum n, IDivisible n) => CSUSeconds -> n -> CSUSeconds # | |
Multiplicative CShort | |
Multiplicative CSigAtomic | |
Defined in Basement.Numerical.Multiplicative Methods midentity :: CSigAtomic # (*) :: CSigAtomic -> CSigAtomic -> CSigAtomic # (^) :: (IsNatural n, Enum n, IDivisible n) => CSigAtomic -> n -> CSigAtomic # | |
Multiplicative CSize | |
Multiplicative CTime | |
Multiplicative CUChar | |
Multiplicative CUInt | |
Multiplicative CUIntMax | |
Multiplicative CUIntPtr | |
Multiplicative CULLong | |
Multiplicative CULong | |
Multiplicative CUSeconds | |
Multiplicative CUShort | |
Multiplicative CWchar | |
Multiplicative Int16 | |
Multiplicative Int32 | |
Multiplicative Int64 | |
Multiplicative Int8 | |
Multiplicative Rational | |
Multiplicative COff | |
Multiplicative Word16 | |
Multiplicative Word32 | |
Multiplicative Word64 | |
Multiplicative Word8 | |
Multiplicative Integer | |
Multiplicative Natural | |
Multiplicative Double | |
Multiplicative Float | |
Multiplicative Int | |
Multiplicative Word | |
SizeValid n => Multiplicative (Bits n) | |
class (Additive a, Multiplicative a) => IDivisible a where #
Represent types that supports an euclidian division
(x ‘div‘ y) * y + (x ‘mod‘ y) == x
Instances
IDivisible Word128 | |
IDivisible Word256 | |
IDivisible CChar | |
IDivisible CInt | |
IDivisible CIntMax | |
IDivisible CIntPtr | |
IDivisible CLLong | |
IDivisible CLong | |
IDivisible CPtrdiff | |
IDivisible CSChar | |
IDivisible CShort | |
IDivisible CSigAtomic | |
Defined in Basement.Numerical.Multiplicative Methods div :: CSigAtomic -> CSigAtomic -> CSigAtomic # mod :: CSigAtomic -> CSigAtomic -> CSigAtomic # divMod :: CSigAtomic -> CSigAtomic -> (CSigAtomic, CSigAtomic) # | |
IDivisible CSize | |
IDivisible CUChar | |
IDivisible CUInt | |
IDivisible CUIntMax | |
IDivisible CUIntPtr | |
IDivisible CULLong | |
IDivisible CULong | |
IDivisible CUShort | |
IDivisible CWchar | |
IDivisible Int16 | |
IDivisible Int32 | |
IDivisible Int64 | |
IDivisible Int8 | |
IDivisible Word16 | |
IDivisible Word32 | |
IDivisible Word64 | |
IDivisible Word8 | |
IDivisible Integer | |
IDivisible Natural | |
IDivisible Int | |
IDivisible Word | |
SizeValid n => IDivisible (Bits n) | |
class Multiplicative a => Divisible a where #
Support for division between same types
This is likely to change to represent specific mathematic divisions
Sign of a signed number
Constructors
SignNegative | |
SignZero | |
SignPositive |
class IntegralRounding a where Source #
Methods
roundUp :: Integral n => a -> n Source #
Round up, to the next integral.
Also known as ceiling
roundDown :: Integral n => a -> n Source #
Round down, to the previous integral
Also known as floor
roundTruncate :: Integral n => a -> n Source #
Truncate to the closest integral to the fractional number closer to 0.
This is equivalent to roundUp for negative Number and roundDown for positive Number
roundNearest :: Integral n => a -> n Source #
Round to the nearest integral
roundNearest 3.6
4 > roundNearest 3.4 3
class FloatingPoint a where Source #
IEEE754 Floating Point
Methods
floatRadix :: Proxy a -> Integer Source #
floatDigits :: Proxy a -> Int Source #
floatRange :: Proxy a -> (Int, Int) Source #
floatDecode :: a -> (Integer, Int) Source #
floatEncode :: Integer -> Int -> a Source #