# Data.Ring

- Package
- purescript-prelude
- Repository
- purescript/purescript-prelude

### #Ring Source

`class (Semiring a) <= Ring a where`

The `Ring`

class is for types that support addition, multiplication,
and subtraction operations.

Instances must satisfy the following laws in addition to the `Semiring`

laws:

- Additive inverse:
`a - a = zero`

- Compatibility of
`sub`

and`negate`

:`a - b = a + (zero - b)`

#### Members

`sub :: a -> a -> a`

#### Instances

### #RingRecord Source

`class RingRecord :: RowList Type -> Row Type -> Row Type -> Constraint`

`class (SemiringRecord rowlist row subrow) <= RingRecord rowlist row subrow | rowlist -> subrow where`

A class for records where all fields have `Ring`

instances, used to
implement the `Ring`

instance for records.

#### Members

#### Instances

`RingRecord Nil row ()`

`(IsSymbol key, Cons key focus subrowTail subrow, RingRecord rowlistTail row subrowTail, Ring focus) => RingRecord (Cons key focus rowlistTail) row subrow`

## Re-exports from **Data.**Semiring

### #Semiring Source

`class Semiring a where`

The `Semiring`

class is for types that support an addition and
multiplication operation.

Instances must satisfy the following laws:

- Commutative monoid under addition:
- Associativity:
`(a + b) + c = a + (b + c)`

- Identity:
`zero + a = a + zero = a`

- Commutative:
`a + b = b + a`

- Associativity:
- Monoid under multiplication:
- Associativity:
`(a * b) * c = a * (b * c)`

- Identity:
`one * a = a * one = a`

- Associativity:
- Multiplication distributes over addition:
- Left distributivity:
`a * (b + c) = (a * b) + (a * c)`

- Right distributivity:
`(a + b) * c = (a * c) + (b * c)`

- Left distributivity:
- Annihilation:
`zero * a = a * zero = zero`

**Note:** The `Number`

and `Int`

types are not fully law abiding
members of this class hierarchy due to the potential for arithmetic
overflows, and in the case of `Number`

, the presence of `NaN`

and
`Infinity`

values. The behaviour is unspecified in these cases.

#### Members

#### Instances

### #SemiringRecord Source

`class SemiringRecord :: RowList Type -> Row Type -> Row Type -> Constraint`

`class SemiringRecord rowlist row subrow | rowlist -> subrow`

A class for records where all fields have `Semiring`

instances, used to
implement the `Semiring`

instance for records.

#### Instances

`SemiringRecord Nil row ()`

`(IsSymbol key, Cons key focus subrowTail subrow, SemiringRecord rowlistTail row subrowTail, Semiring focus) => SemiringRecord (Cons key focus rowlistTail) row subrow`

- Modules
- Control.
Applicative - Control.
Apply - Control.
Bind - Control.
Category - Control.
Monad - Control.
Semigroupoid - Data.
Boolean - Data.
BooleanAlgebra - Data.
Bounded - Data.
Bounded. Generic - Data.
CommutativeRing - Data.
DivisionRing - Data.
Eq - Data.
Eq. Generic - Data.
EuclideanRing - Data.
Field - Data.
Function - Data.
Functor - Data.
Generic. Rep - Data.
HeytingAlgebra - Data.
HeytingAlgebra. Generic - Data.
Monoid - Data.
Monoid. Additive - Data.
Monoid. Conj - Data.
Monoid. Disj - Data.
Monoid. Dual - Data.
Monoid. Endo - Data.
Monoid. Generic - Data.
Monoid. Multiplicative - Data.
NaturalTransformation - Data.
Ord - Data.
Ord. Generic - Data.
Ordering - Data.
Reflectable - Data.
Ring - Data.
Ring. Generic - Data.
Semigroup - Data.
Semigroup. First - Data.
Semigroup. Generic - Data.
Semigroup. Last - Data.
Semiring - Data.
Semiring. Generic - Data.
Show - Data.
Show. Generic - Data.
Symbol - Data.
Unit - Data.
Void - Prelude
- Record.
Unsafe - Type.
Proxy