numhask-0.3.1: numeric classes

Safe HaskellNone
LanguageHaskell2010

NumHask.Algebra.Abstract.Ring

Description

Ring

Synopsis

Documentation

class (Additive a, Multiplicative a) => Distributive a Source #

Distributive laws

a * (b + c) == a * b + a * c
(a * b) * c == a * c + b * c
Instances
Distributive Bool Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Distributive Double Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Distributive Float Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Distributive Int Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Distributive Int8 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Distributive Int16 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Distributive Int32 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Distributive Int64 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Distributive Integer Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Distributive Natural Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Distributive Word Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Distributive Word8 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Distributive Word16 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Distributive Word32 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Distributive Word64 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

(Distributive a, Subtractive a) => Distributive (Complex a) Source # 
Instance details

Defined in NumHask.Data.Complex

GCDConstraints a => Distributive (Ratio a) Source # 
Instance details

Defined in NumHask.Data.Rational

Distributive a => Distributive (Pair a) Source # 
Instance details

Defined in NumHask.Data.Pair

(Ord a, LowerBoundedField a, ExpField a) => Distributive (LogField a) Source # 
Instance details

Defined in NumHask.Data.LogField

(Additive a, Multiplicative a) => Distributive (Wrapped a) Source # 
Instance details

Defined in NumHask.Data.Wrapped

(Additive a, Multiplicative a) => Distributive (Positive a) Source # 
Instance details

Defined in NumHask.Data.Positive

Distributive b => Distributive (a -> b) Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

class Distributive a => Semiring a Source #

A Semiring is a ring without, necessarily, negative elements.

FIXME: rule zero' = zero. Is this somehow expressible in haskell?

Instances
Distributive a => Semiring a Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

class (Distributive a, Subtractive a) => Ring a Source #

A Ring is an abelian group under addition and monoid under multiplication where multiplication distributes over addition. Alternatively, a ring is semiring where additive inverses exist

Instances
(Distributive a, Subtractive a) => Ring a Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

class (Distributive a, Subtractive a) => CommutativeRing a Source #

A Commutative Ring is a ring with a Commutative Multiplication operation. Recall that Addition is Commutative in all Rings

Instances
(Distributive a, Subtractive a) => CommutativeRing a Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

class (Distributive a, Divisive a) => IntegralDomain a Source #

An Integral Domain generalizes a ring of integers by requiring the product of any two nonzero elements to be nonzero. This means that if a ≠ 0, an equality ab = ac implies b = c. FIXME: write a rule for this

Instances
IntegralDomain Double Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

IntegralDomain Float Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

(IntegralDomain a, Subtractive a) => IntegralDomain (Complex a) Source # 
Instance details

Defined in NumHask.Data.Complex

GCDConstraints a => IntegralDomain (Ratio a) Source # 
Instance details

Defined in NumHask.Data.Rational

IntegralDomain a => IntegralDomain (Pair a) Source # 
Instance details

Defined in NumHask.Data.Pair

(Ord a, ExpField a, LowerBoundedField a) => IntegralDomain (LogField a) Source # 
Instance details

Defined in NumHask.Data.LogField

(Additive a, Divisive a) => IntegralDomain (Wrapped a) Source # 
Instance details

Defined in NumHask.Data.Wrapped

(Additive a, Divisive a) => IntegralDomain (Positive a) Source # 
Instance details

Defined in NumHask.Data.Positive

IntegralDomain b => IntegralDomain (a -> b) Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

class Distributive a => StarSemiring a where Source #

A StarSemiring is a semiring with an additional unary operator star satisfying:

star a = one + a `times` star a

Minimal complete definition

Nothing

Methods

star :: a -> a Source #

plus :: a -> a Source #

Instances
StarSemiring a => StarSemiring (Wrapped a) Source # 
Instance details

Defined in NumHask.Data.Wrapped

Methods

star :: Wrapped a -> Wrapped a Source #

plus :: Wrapped a -> Wrapped a Source #

StarSemiring b => StarSemiring (a -> b) Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

star :: (a -> b) -> a -> b Source #

plus :: (a -> b) -> a -> b Source #

class (StarSemiring a, Idempotent a) => KleeneAlgebra a Source #

A Kleene Algebra is a Star Semiring with idempotent addition

a `times` x + x = a ==> star a `times` x + x = x
x `times` a + x = a ==> x `times` star a + x = x
Instances
(StarSemiring a, Magma a) => KleeneAlgebra (Wrapped a) Source # 
Instance details

Defined in NumHask.Data.Wrapped

KleeneAlgebra b => KleeneAlgebra (a -> b) Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

class Distributive a => InvolutiveRing a where Source #

Involutive Ring

adj (a + b) ==> adj a + adj b
adj (a * b) ==> adj a * adj b
adj one ==> one
adj (adj a) ==> a

Note: elements for which adj a == a are called "self-adjoint".

Minimal complete definition

Nothing

Methods

adj :: a -> a Source #

Instances
InvolutiveRing Double Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: Double -> Double Source #

InvolutiveRing Float Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: Float -> Float Source #

InvolutiveRing Int Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: Int -> Int Source #

InvolutiveRing Int8 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: Int8 -> Int8 Source #

InvolutiveRing Int16 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: Int16 -> Int16 Source #

InvolutiveRing Int32 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: Int32 -> Int32 Source #

InvolutiveRing Int64 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: Int64 -> Int64 Source #

InvolutiveRing Integer Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: Integer -> Integer Source #

InvolutiveRing Natural Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: Natural -> Natural Source #

InvolutiveRing Word Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: Word -> Word Source #

InvolutiveRing Word8 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: Word8 -> Word8 Source #

InvolutiveRing Word16 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: Word16 -> Word16 Source #

InvolutiveRing Word32 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: Word32 -> Word32 Source #

InvolutiveRing Word64 Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: Word64 -> Word64 Source #

(Distributive a, Subtractive a) => InvolutiveRing (Complex a) Source # 
Instance details

Defined in NumHask.Data.Complex

Methods

adj :: Complex a -> Complex a Source #

InvolutiveRing a => InvolutiveRing (Wrapped a) Source # 
Instance details

Defined in NumHask.Data.Wrapped

Methods

adj :: Wrapped a -> Wrapped a Source #

InvolutiveRing b => InvolutiveRing (a -> b) Source # 
Instance details

Defined in NumHask.Algebra.Abstract.Ring

Methods

adj :: (a -> b) -> a -> b Source #