foundation-0.0.1: Alternative prelude with batteries and no dependencies

LicenseBSD-style
MaintainerVincent Hanquez <vincent@snarc.org>
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Foundation.Number

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

Documentation

class (Eq a, Ord a, Num a, Enum a, Additive a, Subtractive a, Difference a ~ a, Multiplicative a, Divisible a) => Number a where Source #

Number literals, convertible through the generic Integer type.

all number are Enum'erable, meaning that you can move to next element

Minimal complete definition

toInteger

Methods

toInteger :: a -> Integer Source #

fromInteger :: Number a => Integer -> a Source #

convert an Integer to a type having the Number constraint

class Number a => Signed a where Source #

Number literals that can be negative

Minimal complete definition

abs, signum

Methods

abs :: a -> a Source #

signum :: a -> Sign Source #

class Additive a where Source #

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

Minimal complete definition

azero, (+)

Methods

azero :: a Source #

(+) :: a -> a -> a infixl 6 Source #

scale :: Number n => n -> a -> a Source #

scale :: Number n => n -> a -> a Source #

Instances

Additive Int Source # 

Methods

azero :: Int Source #

(+) :: Int -> Int -> Int Source #

scale :: Number n => n -> Int -> Int Source #

Additive Int8 Source # 

Methods

azero :: Int8 Source #

(+) :: Int8 -> Int8 -> Int8 Source #

scale :: Number n => n -> Int8 -> Int8 Source #

Additive Int16 Source # 

Methods

azero :: Int16 Source #

(+) :: Int16 -> Int16 -> Int16 Source #

scale :: Number n => n -> Int16 -> Int16 Source #

Additive Int32 Source # 

Methods

azero :: Int32 Source #

(+) :: Int32 -> Int32 -> Int32 Source #

scale :: Number n => n -> Int32 -> Int32 Source #

Additive Int64 Source # 

Methods

azero :: Int64 Source #

(+) :: Int64 -> Int64 -> Int64 Source #

scale :: Number n => n -> Int64 -> Int64 Source #

Additive Integer Source # 
Additive Word Source # 

Methods

azero :: Word Source #

(+) :: Word -> Word -> Word Source #

scale :: Number n => n -> Word -> Word Source #

Additive Word8 Source # 

Methods

azero :: Word8 Source #

(+) :: Word8 -> Word8 -> Word8 Source #

scale :: Number n => n -> Word8 -> Word8 Source #

Additive Word16 Source # 
Additive Word32 Source # 
Additive Word64 Source # 

class Multiplicative a where Source #

Represent class of things that can be multiplied together

  • x * midentity = x
  • midentity * x = x

Minimal complete definition

midentity, (*)

Methods

midentity :: a Source #

Identity element over multiplication

(*) :: a -> a -> a infixl 7 Source #

Multiplication of 2 elements that result in another element

(^) :: Number n => a -> n -> a infixr 8 Source #

Raise to power, repeated multiplication e.g. > a ^ 2 = a * a > a ^ 10 = (a ^ 5) * (a ^ 5) ..

Instances

Multiplicative Int Source # 

Methods

midentity :: Int Source #

(*) :: Int -> Int -> Int Source #

(^) :: Number n => Int -> n -> Int Source #

Multiplicative Int8 Source # 

Methods

midentity :: Int8 Source #

(*) :: Int8 -> Int8 -> Int8 Source #

(^) :: Number n => Int8 -> n -> Int8 Source #

Multiplicative Int16 Source # 

Methods

midentity :: Int16 Source #

(*) :: Int16 -> Int16 -> Int16 Source #

(^) :: Number n => Int16 -> n -> Int16 Source #

Multiplicative Int32 Source # 

Methods

midentity :: Int32 Source #

(*) :: Int32 -> Int32 -> Int32 Source #

(^) :: Number n => Int32 -> n -> Int32 Source #

Multiplicative Int64 Source # 

Methods

midentity :: Int64 Source #

(*) :: Int64 -> Int64 -> Int64 Source #

(^) :: Number n => Int64 -> n -> Int64 Source #

Multiplicative Integer Source # 
Multiplicative Word Source # 

Methods

midentity :: Word Source #

(*) :: Word -> Word -> Word Source #

(^) :: Number n => Word -> n -> Word Source #

Multiplicative Word8 Source # 

Methods

midentity :: Word8 Source #

(*) :: Word8 -> Word8 -> Word8 Source #

(^) :: Number n => Word8 -> n -> Word8 Source #

Multiplicative Word16 Source # 
Multiplicative Word32 Source # 
Multiplicative Word64 Source # 

class Subtractive a where Source #

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: e.g. (-) :: Int -> Int -> Int (-) :: DateTime -> DateTime -> Seconds (-) :: Ptr a -> Ptr a -> PtrDiff

Minimal complete definition

(-)

Associated Types

type Difference a Source #

Methods

(-) :: a -> a -> Difference a infixl 6 Source #

Instances

Subtractive Int Source # 

Associated Types

type Difference Int :: * Source #

Methods

(-) :: Int -> Int -> Difference Int Source #

Subtractive Int8 Source # 

Associated Types

type Difference Int8 :: * Source #

Methods

(-) :: Int8 -> Int8 -> Difference Int8 Source #

Subtractive Int16 Source # 

Associated Types

type Difference Int16 :: * Source #

Subtractive Int32 Source # 

Associated Types

type Difference Int32 :: * Source #

Subtractive Int64 Source # 

Associated Types

type Difference Int64 :: * Source #

Subtractive Integer Source # 

Associated Types

type Difference Integer :: * Source #

Subtractive Word Source # 

Associated Types

type Difference Word :: * Source #

Methods

(-) :: Word -> Word -> Difference Word Source #

Subtractive Word8 Source # 

Associated Types

type Difference Word8 :: * Source #

Subtractive Word16 Source # 

Associated Types

type Difference Word16 :: * Source #

Subtractive Word32 Source # 

Associated Types

type Difference Word32 :: * Source #

Subtractive Word64 Source # 

Associated Types

type Difference Word64 :: * Source #

class Multiplicative a => Divisible a where Source #

Represent class of things that can be divided

(x ‘div‘ y) * y + (x ‘mod‘ y) == x

Minimal complete definition

div, mod | divMod

Methods

div :: a -> a -> a Source #

mod :: a -> a -> a Source #

divMod :: a -> a -> (a, a) Source #

Instances

Divisible Int Source # 

Methods

div :: Int -> Int -> Int Source #

mod :: Int -> Int -> Int Source #

divMod :: Int -> Int -> (Int, Int) Source #

Divisible Int8 Source # 

Methods

div :: Int8 -> Int8 -> Int8 Source #

mod :: Int8 -> Int8 -> Int8 Source #

divMod :: Int8 -> Int8 -> (Int8, Int8) Source #

Divisible Int16 Source # 
Divisible Int32 Source # 
Divisible Int64 Source # 
Divisible Integer Source # 
Divisible Word Source # 

Methods

div :: Word -> Word -> Word Source #

mod :: Word -> Word -> Word Source #

divMod :: Word -> Word -> (Word, Word) Source #

Divisible Word8 Source # 
Divisible Word16 Source # 
Divisible Word32 Source # 
Divisible Word64 Source # 

data Sign Source #

Sign of a signed number

Constructors

Negative 
Zero 
Positive 

Instances

Eq Sign Source # 

Methods

(==) :: Sign -> Sign -> Bool #

(/=) :: Sign -> Sign -> Bool #