numhask-0.5.0: 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
zero * a == zero
a * zero == zero

The sneaking in of the annihilation laws here glosses over the possibility that the multiplicative zero element does not have to correspond with the additive unital zero.

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 commutative monoidal under addition, has a monoidal multiplication operator (not necessarily commutative), and where multiplication distributes over addition.

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 monoidal under multiplication, and where multiplication distributes over addition.

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

Defined in NumHask.Algebra.Abstract.Ring

class Distributive 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.

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, Multiplicative a) => IntegralDomain (Wrapped a) Source # 
Instance details

Defined in NumHask.Data.Wrapped

(Additive a, Multiplicative 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 #

two :: (Multiplicative a, Additive a) => a Source #

Defining two requires adding the multiplicative unital to itself.