numhask-0.2.3.1: numeric classes

Safe HaskellNone
LanguageHaskell2010

NumHask.Algebra.Field

Description

Field classes

Synopsis

Documentation

class (MultiplicativeInvertible a, MultiplicativeGroup a, Semiring a) => Semifield a #

A Semifield is chosen here to be a Field without an Additive Inverse

Instances
Semifield Double # 
Instance details

Defined in NumHask.Algebra.Field

Semifield Float # 
Instance details

Defined in NumHask.Algebra.Field

(Semifield a, AdditiveGroup a) => Semifield (Complex a) # 
Instance details

Defined in NumHask.Algebra.Field

(Ord a, Signed a, Integral a, Multiplicative a, Ring a) => Semifield (Ratio a) # 
Instance details

Defined in NumHask.Algebra.Rational

class (AdditiveGroup a, MultiplicativeGroup a, Ring a) => Field a #

A Field is a Ring plus additive invertible and multiplicative invertible operations.

A summary of the rules inherited from super-classes of Field

zero + a == a
a + zero == a
(a + b) + c == a + (b + c)
a + b == b + a
a - a = zero
negate a = zero - a
negate a + a = zero
a + negate a = zero
one * a == a
a * one == a
(a * b) * c == a * (b * c)
a * (b + c) == a * b + a * c
(a + b) * c == a * c + b * c
a * zero == zero
zero * a == zero
a * b == b * a
a / a = one
recip a = one / a
recip a * a = one
a * recip a = one
Instances
Field Double # 
Instance details

Defined in NumHask.Algebra.Field

Field Float # 
Instance details

Defined in NumHask.Algebra.Field

Field a => Field (Complex a) # 
Instance details

Defined in NumHask.Algebra.Field

(Ord a, Signed a, Integral a, Multiplicative a, Ring a) => Field (Ratio a) # 
Instance details

Defined in NumHask.Algebra.Rational

(MultiplicativeGroup a, AdditiveGroup a, Semiring a) => Field (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

class Field a => ExpField a where #

A hyperbolic field class

sqrt . (**2) == identity
log . exp == identity
for +ive b, a != 0,1: a ** logBase a b ≈ b

Minimal complete definition

exp, log

Methods

exp :: a -> a #

log :: a -> a #

logBase :: a -> a -> a #

(**) :: a -> a -> a #

sqrt :: a -> a #

Instances
ExpField Double # 
Instance details

Defined in NumHask.Algebra.Field

ExpField Float # 
Instance details

Defined in NumHask.Algebra.Field

Methods

exp :: Float -> Float #

log :: Float -> Float #

logBase :: Float -> Float -> Float #

(**) :: Float -> Float -> Float #

sqrt :: Float -> Float #

(Ord a, TrigField a, ExpField a) => ExpField (Complex a) #

todo: bottom is here somewhere???

Instance details

Defined in NumHask.Algebra.Field

Methods

exp :: Complex a -> Complex a #

log :: Complex a -> Complex a #

logBase :: Complex a -> Complex a -> Complex a #

(**) :: Complex a -> Complex a -> Complex a #

sqrt :: Complex a -> Complex a #

(Ord a, TrigField a, ExpField a) => ExpField (Complex a) #

todo: bottom is here somewhere???

Instance details

Defined in NumHask.Data.Complex

Methods

exp :: Complex a -> Complex a #

log :: Complex a -> Complex a #

logBase :: Complex a -> Complex a -> Complex a #

(**) :: Complex a -> Complex a -> Complex a #

sqrt :: Complex a -> Complex a #

class (Field a, Integral b, AdditiveGroup b, MultiplicativeUnital b) => QuotientField a b where #

quotient fields explode constraints if they allow for polymorphic integral types

a - one < floor a <= a <= ceiling a < a + one
round a == floor (a + one/(one+one))

fixme: had to redefine Signed operators here because of the Field import in Metric, itself due to Complex being defined there

Minimal complete definition

properFraction

Methods

properFraction :: a -> (b, a) #

round :: a -> b #

round :: (Ord a, Eq b) => a -> b #

ceiling :: a -> b #

ceiling :: Ord a => a -> b #

floor :: a -> b #

floor :: Ord a => a -> b #

Instances
QuotientField Double Integer # 
Instance details

Defined in NumHask.Algebra.Field

QuotientField Float Integer # 
Instance details

Defined in NumHask.Algebra.Field

(Ord a, Signed a, ToInteger a, Integral a, Multiplicative a, Ring a, Eq b, AdditiveGroup b, Integral b, FromInteger b) => QuotientField (Ratio a) b # 
Instance details

Defined in NumHask.Algebra.Rational

Methods

properFraction :: Ratio a -> (b, Ratio a) #

round :: Ratio a -> b #

ceiling :: Ratio a -> b #

floor :: Ratio a -> b #

class Semifield a => UpperBoundedField a where #

A bounded field includes the concepts of infinity and NaN, thus moving away from error throwing.

one / zero + infinity == infinity
infinity + a == infinity
zero / zero != nan

Note the tricky law that, although nan is assigned to zero/zero, they are never-the-less not equal. A committee decided this.

Methods

infinity :: a #

nan :: a #

Instances
UpperBoundedField Double # 
Instance details

Defined in NumHask.Algebra.Field

Methods

infinity :: Double #

nan :: Double #

UpperBoundedField Float # 
Instance details

Defined in NumHask.Algebra.Field

Methods

infinity :: Float #

nan :: Float #

(AdditiveGroup a, UpperBoundedField a) => UpperBoundedField (Complex a) #

todo: work out boundings for complex as it stands now, complex is different eg

one / (zero :: Complex Float) == nan
Instance details

Defined in NumHask.Algebra.Field

Methods

infinity :: Complex a #

nan :: Complex a #

(Ord a, Signed a, Integral a, AdditiveInvertible a, Multiplicative a, Ring a) => UpperBoundedField (Ratio a) # 
Instance details

Defined in NumHask.Algebra.Rational

Methods

infinity :: Ratio a #

nan :: Ratio a #

class Field a => LowerBoundedField a where #

Methods

negInfinity :: a #

Instances
LowerBoundedField Double # 
Instance details

Defined in NumHask.Algebra.Field

Methods

negInfinity :: Double #

LowerBoundedField Float # 
Instance details

Defined in NumHask.Algebra.Field

Methods

negInfinity :: Float #

(Ord a, Signed a, Integral a, Multiplicative a, Ring a, AdditiveInvertible a) => LowerBoundedField (Ratio a) # 
Instance details

Defined in NumHask.Algebra.Rational

Methods

negInfinity :: Ratio a #

class Field a => TrigField a where #

Trigonometric Field

Minimal complete definition

pi, sin, cos, asin, acos, atan, sinh, cosh, asinh, acosh, atanh

Methods

pi :: a #

sin :: a -> a #

cos :: a -> a #

tan :: a -> a #

asin :: a -> a #

acos :: a -> a #

atan :: a -> a #

sinh :: a -> a #

cosh :: a -> a #

tanh :: a -> a #

asinh :: a -> a #

acosh :: a -> a #

atanh :: a -> a #