linear-base-0.5.0: Standard library for linear types.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Num.Linear

Description

This module provides a linear Num class with instances. Import this module to use linear versions of (+), (-), etc, on numeric types like Int and Double.

The Typeclass Hierarchy

The Num class is broken up into several instances. Here is the basic hierarchy:

  • Additive ⊆ AddIdentity ⊆ AdditiveGroup
  • MultIdentity ⊆ MultIdentity
  • (AddIdentity ∩ MultIdentity) ⊆ Semiring
  • (AdditiveGroup ∩ Semiring) ⊆ Ring
  • (FromInteger ∩ Ring) ⊆ Num
Synopsis

Num and sub-classes

class (Ring a, FromInteger a) => Num a where Source #

Methods

abs :: a %1 -> a Source #

signum :: a %1 -> a Source #

Instances

Instances details
Num Int16 Source # 
Instance details

Defined in Data.Num.Linear

Methods

abs :: Int16 %1 -> Int16 Source #

signum :: Int16 %1 -> Int16 Source #

Num Int32 Source # 
Instance details

Defined in Data.Num.Linear

Methods

abs :: Int32 %1 -> Int32 Source #

signum :: Int32 %1 -> Int32 Source #

Num Int64 Source # 
Instance details

Defined in Data.Num.Linear

Methods

abs :: Int64 %1 -> Int64 Source #

signum :: Int64 %1 -> Int64 Source #

Num Int8 Source # 
Instance details

Defined in Data.Num.Linear

Methods

abs :: Int8 %1 -> Int8 Source #

signum :: Int8 %1 -> Int8 Source #

Num Word16 Source # 
Instance details

Defined in Data.Num.Linear

Methods

abs :: Word16 %1 -> Word16 Source #

signum :: Word16 %1 -> Word16 Source #

Num Word32 Source # 
Instance details

Defined in Data.Num.Linear

Methods

abs :: Word32 %1 -> Word32 Source #

signum :: Word32 %1 -> Word32 Source #

Num Word64 Source # 
Instance details

Defined in Data.Num.Linear

Methods

abs :: Word64 %1 -> Word64 Source #

signum :: Word64 %1 -> Word64 Source #

Num Word8 Source # 
Instance details

Defined in Data.Num.Linear

Methods

abs :: Word8 %1 -> Word8 Source #

signum :: Word8 %1 -> Word8 Source #

Num Integer Source # 
Instance details

Defined in Data.Num.Linear

Num Double Source # 
Instance details

Defined in Data.Num.Linear

Methods

abs :: Double %1 -> Double Source #

signum :: Double %1 -> Double Source #

Num Float Source # 
Instance details

Defined in Data.Num.Linear

Methods

abs :: Float %1 -> Float Source #

signum :: Float %1 -> Float Source #

Num Int Source # 
Instance details

Defined in Data.Num.Linear

Methods

abs :: Int %1 -> Int Source #

signum :: Int %1 -> Int Source #

Num Word Source # 
Instance details

Defined in Data.Num.Linear

Methods

abs :: Word %1 -> Word Source #

signum :: Word %1 -> Word Source #

class Additive a where Source #

A type that can be added linearly. The operation (+) is associative and commutative, i.e., for all a, b, c

(a + b) + c = a + (b + c)
a + b = b + c

Methods

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

Instances

Instances details
Additive Int16 Source # 
Instance details

Defined in Data.Num.Linear

Methods

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

Additive Int32 Source # 
Instance details

Defined in Data.Num.Linear

Methods

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

Additive Int64 Source # 
Instance details

Defined in Data.Num.Linear

Methods

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

Additive Int8 Source # 
Instance details

Defined in Data.Num.Linear

Methods

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

Additive Word16 Source # 
Instance details

Defined in Data.Num.Linear

Methods

(+) :: Word16 %1 -> Word16 %1 -> Word16 Source #

Additive Word32 Source # 
Instance details

Defined in Data.Num.Linear

Methods

(+) :: Word32 %1 -> Word32 %1 -> Word32 Source #

Additive Word64 Source # 
Instance details

Defined in Data.Num.Linear

Methods

(+) :: Word64 %1 -> Word64 %1 -> Word64 Source #

Additive Word8 Source # 
Instance details

Defined in Data.Num.Linear

Methods

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

Additive Integer Source # 
Instance details

Defined in Data.Num.Linear

Methods

(+) :: Integer %1 -> Integer %1 -> Integer Source #

Additive Natural Source # 
Instance details

Defined in Data.Num.Linear

Methods

(+) :: Natural %1 -> Natural %1 -> Natural Source #

Additive Double Source # 
Instance details

Defined in Data.Num.Linear

Methods

(+) :: Double %1 -> Double %1 -> Double Source #

Additive Float Source # 
Instance details

Defined in Data.Num.Linear

Methods

(+) :: Float %1 -> Float %1 -> Float Source #

Additive Int Source # 
Instance details

Defined in Data.Num.Linear

Methods

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

Additive Word Source # 
Instance details

Defined in Data.Num.Linear

Methods

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

class Additive a => AddIdentity a where Source #

An Additive type with an identity on (+).

Methods

zero :: a Source #

Instances

Instances details
AddIdentity Int16 Source # 
Instance details

Defined in Data.Num.Linear

Methods

zero :: Int16 Source #

AddIdentity Int32 Source # 
Instance details

Defined in Data.Num.Linear

Methods

zero :: Int32 Source #

AddIdentity Int64 Source # 
Instance details

Defined in Data.Num.Linear

Methods

zero :: Int64 Source #

AddIdentity Int8 Source # 
Instance details

Defined in Data.Num.Linear

Methods

zero :: Int8 Source #

AddIdentity Word16 Source # 
Instance details

Defined in Data.Num.Linear

Methods

zero :: Word16 Source #

AddIdentity Word32 Source # 
Instance details

Defined in Data.Num.Linear

Methods

zero :: Word32 Source #

AddIdentity Word64 Source # 
Instance details

Defined in Data.Num.Linear

Methods

zero :: Word64 Source #

AddIdentity Word8 Source # 
Instance details

Defined in Data.Num.Linear

Methods

zero :: Word8 Source #

AddIdentity Integer Source # 
Instance details

Defined in Data.Num.Linear

Methods

zero :: Integer Source #

AddIdentity Natural Source # 
Instance details

Defined in Data.Num.Linear

Methods

zero :: Natural Source #

AddIdentity Double Source # 
Instance details

Defined in Data.Num.Linear

Methods

zero :: Double Source #

AddIdentity Float Source # 
Instance details

Defined in Data.Num.Linear

Methods

zero :: Float Source #

AddIdentity Int Source # 
Instance details

Defined in Data.Num.Linear

Methods

zero :: Int Source #

AddIdentity Word Source # 
Instance details

Defined in Data.Num.Linear

Methods

zero :: Word Source #

class AddIdentity a => AdditiveGroup a where Source #

An AddIdentity with inverses that satisfies the laws of an abelian group

Minimal complete definition

negate | (-)

Methods

negate :: a %1 -> a Source #

(-) :: a %1 -> a %1 -> a infixl 6 Source #

Instances

Instances details
AdditiveGroup Int16 Source # 
Instance details

Defined in Data.Num.Linear

Methods

negate :: Int16 %1 -> Int16 Source #

(-) :: Int16 %1 -> Int16 %1 -> Int16 Source #

AdditiveGroup Int32 Source # 
Instance details

Defined in Data.Num.Linear

Methods

negate :: Int32 %1 -> Int32 Source #

(-) :: Int32 %1 -> Int32 %1 -> Int32 Source #

AdditiveGroup Int64 Source # 
Instance details

Defined in Data.Num.Linear

Methods

negate :: Int64 %1 -> Int64 Source #

(-) :: Int64 %1 -> Int64 %1 -> Int64 Source #

AdditiveGroup Int8 Source # 
Instance details

Defined in Data.Num.Linear

Methods

negate :: Int8 %1 -> Int8 Source #

(-) :: Int8 %1 -> Int8 %1 -> Int8 Source #

AdditiveGroup Word16 Source # 
Instance details

Defined in Data.Num.Linear

Methods

negate :: Word16 %1 -> Word16 Source #

(-) :: Word16 %1 -> Word16 %1 -> Word16 Source #

AdditiveGroup Word32 Source # 
Instance details

Defined in Data.Num.Linear

Methods

negate :: Word32 %1 -> Word32 Source #

(-) :: Word32 %1 -> Word32 %1 -> Word32 Source #

AdditiveGroup Word64 Source # 
Instance details

Defined in Data.Num.Linear

Methods

negate :: Word64 %1 -> Word64 Source #

(-) :: Word64 %1 -> Word64 %1 -> Word64 Source #

AdditiveGroup Word8 Source # 
Instance details

Defined in Data.Num.Linear

Methods

negate :: Word8 %1 -> Word8 Source #

(-) :: Word8 %1 -> Word8 %1 -> Word8 Source #

AdditiveGroup Integer Source # 
Instance details

Defined in Data.Num.Linear

Methods

negate :: Integer %1 -> Integer Source #

(-) :: Integer %1 -> Integer %1 -> Integer Source #

AdditiveGroup Natural Source # 
Instance details

Defined in Data.Num.Linear

Methods

negate :: Natural %1 -> Natural Source #

(-) :: Natural %1 -> Natural %1 -> Natural Source #

AdditiveGroup Double Source # 
Instance details

Defined in Data.Num.Linear

Methods

negate :: Double %1 -> Double Source #

(-) :: Double %1 -> Double %1 -> Double Source #

AdditiveGroup Float Source # 
Instance details

Defined in Data.Num.Linear

Methods

negate :: Float %1 -> Float Source #

(-) :: Float %1 -> Float %1 -> Float Source #

AdditiveGroup Int Source # 
Instance details

Defined in Data.Num.Linear

Methods

negate :: Int %1 -> Int Source #

(-) :: Int %1 -> Int %1 -> Int Source #

AdditiveGroup Word Source # 
Instance details

Defined in Data.Num.Linear

Methods

negate :: Word %1 -> Word Source #

(-) :: Word %1 -> Word %1 -> Word Source #

class Multiplicative a where Source #

A numeric type with an associative (*) operation

Methods

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

Instances

Instances details
Multiplicative Int16 Source # 
Instance details

Defined in Data.Num.Linear

Methods

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

Multiplicative Int32 Source # 
Instance details

Defined in Data.Num.Linear

Methods

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

Multiplicative Int64 Source # 
Instance details

Defined in Data.Num.Linear

Methods

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

Multiplicative Int8 Source # 
Instance details

Defined in Data.Num.Linear

Methods

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

Multiplicative Word16 Source # 
Instance details

Defined in Data.Num.Linear

Methods

(*) :: Word16 %1 -> Word16 %1 -> Word16 Source #

Multiplicative Word32 Source # 
Instance details

Defined in Data.Num.Linear

Methods

(*) :: Word32 %1 -> Word32 %1 -> Word32 Source #

Multiplicative Word64 Source # 
Instance details

Defined in Data.Num.Linear

Methods

(*) :: Word64 %1 -> Word64 %1 -> Word64 Source #

Multiplicative Word8 Source # 
Instance details

Defined in Data.Num.Linear

Methods

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

Multiplicative Integer Source # 
Instance details

Defined in Data.Num.Linear

Methods

(*) :: Integer %1 -> Integer %1 -> Integer Source #

Multiplicative Natural Source # 
Instance details

Defined in Data.Num.Linear

Methods

(*) :: Natural %1 -> Natural %1 -> Natural Source #

Multiplicative Double Source # 
Instance details

Defined in Data.Num.Linear

Methods

(*) :: Double %1 -> Double %1 -> Double Source #

Multiplicative Float Source # 
Instance details

Defined in Data.Num.Linear

Methods

(*) :: Float %1 -> Float %1 -> Float Source #

Multiplicative Int Source # 
Instance details

Defined in Data.Num.Linear

Methods

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

Multiplicative Word Source # 
Instance details

Defined in Data.Num.Linear

Methods

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

class Multiplicative a => MultIdentity a where Source #

A Multiplicative type with an identity for (*)

Methods

one :: a Source #

Instances

Instances details
MultIdentity Int16 Source # 
Instance details

Defined in Data.Num.Linear

Methods

one :: Int16 Source #

MultIdentity Int32 Source # 
Instance details

Defined in Data.Num.Linear

Methods

one :: Int32 Source #

MultIdentity Int64 Source # 
Instance details

Defined in Data.Num.Linear

Methods

one :: Int64 Source #

MultIdentity Int8 Source # 
Instance details

Defined in Data.Num.Linear

Methods

one :: Int8 Source #

MultIdentity Word16 Source # 
Instance details

Defined in Data.Num.Linear

Methods

one :: Word16 Source #

MultIdentity Word32 Source # 
Instance details

Defined in Data.Num.Linear

Methods

one :: Word32 Source #

MultIdentity Word64 Source # 
Instance details

Defined in Data.Num.Linear

Methods

one :: Word64 Source #

MultIdentity Word8 Source # 
Instance details

Defined in Data.Num.Linear

Methods

one :: Word8 Source #

MultIdentity Integer Source # 
Instance details

Defined in Data.Num.Linear

Methods

one :: Integer Source #

MultIdentity Natural Source # 
Instance details

Defined in Data.Num.Linear

Methods

one :: Natural Source #

MultIdentity Double Source # 
Instance details

Defined in Data.Num.Linear

Methods

one :: Double Source #

MultIdentity Float Source # 
Instance details

Defined in Data.Num.Linear

Methods

one :: Float Source #

MultIdentity Int Source # 
Instance details

Defined in Data.Num.Linear

Methods

one :: Int Source #

MultIdentity Word Source # 
Instance details

Defined in Data.Num.Linear

Methods

one :: Word Source #

class (AddIdentity a, MultIdentity a) => Semiring a Source #

A semiring class. This is basically a numeric type with mutliplication, addition and with identities for each. The laws:

zero * x = zero
a * (b + c) = (a * b) + (a * c)

Instances

Instances details
Semiring Int16 Source # 
Instance details

Defined in Data.Num.Linear

Semiring Int32 Source # 
Instance details

Defined in Data.Num.Linear

Semiring Int64 Source # 
Instance details

Defined in Data.Num.Linear

Semiring Int8 Source # 
Instance details

Defined in Data.Num.Linear

Semiring Word16 Source # 
Instance details

Defined in Data.Num.Linear

Semiring Word32 Source # 
Instance details

Defined in Data.Num.Linear

Semiring Word64 Source # 
Instance details

Defined in Data.Num.Linear

Semiring Word8 Source # 
Instance details

Defined in Data.Num.Linear

Semiring Integer Source # 
Instance details

Defined in Data.Num.Linear

Semiring Natural Source # 
Instance details

Defined in Data.Num.Linear

Semiring Double Source # 
Instance details

Defined in Data.Num.Linear

Semiring Float Source # 
Instance details

Defined in Data.Num.Linear

Semiring Int Source # 
Instance details

Defined in Data.Num.Linear

Semiring Word Source # 
Instance details

Defined in Data.Num.Linear

class (AdditiveGroup a, Semiring a) => Ring a Source #

A Ring instance is a numeric type with (+), (-), (*) and all the following properties: a group with (+) and a MultIdentity with (*) along with distributive laws.

Instances

Instances details
Ring Int16 Source # 
Instance details

Defined in Data.Num.Linear

Ring Int32 Source # 
Instance details

Defined in Data.Num.Linear

Ring Int64 Source # 
Instance details

Defined in Data.Num.Linear

Ring Int8 Source # 
Instance details

Defined in Data.Num.Linear

Ring Word16 Source # 
Instance details

Defined in Data.Num.Linear

Ring Word32 Source # 
Instance details

Defined in Data.Num.Linear

Ring Word64 Source # 
Instance details

Defined in Data.Num.Linear

Ring Word8 Source # 
Instance details

Defined in Data.Num.Linear

Ring Integer Source # 
Instance details

Defined in Data.Num.Linear

Ring Double Source # 
Instance details

Defined in Data.Num.Linear

Ring Float Source # 
Instance details

Defined in Data.Num.Linear

Ring Int Source # 
Instance details

Defined in Data.Num.Linear

Ring Word Source # 
Instance details

Defined in Data.Num.Linear

class FromInteger a where Source #

A numeric type that Integers can be embedded into while satisfying all the typeclass laws Integers obey. That is, if there's some property like commutivity of integers x + y == y + x, then we must have:

fromInteger x + fromInteger y == fromInteger y + fromInteger x

For mathy folk: fromInteger should be a homomorphism over (+) and (*).

Methods

fromInteger :: Integer %1 -> a Source #

Instances

Instances details
FromInteger Int16 Source # 
Instance details

Defined in Data.Num.Linear

Methods

fromInteger :: Integer %1 -> Int16 Source #

FromInteger Int32 Source # 
Instance details

Defined in Data.Num.Linear

Methods

fromInteger :: Integer %1 -> Int32 Source #

FromInteger Int64 Source # 
Instance details

Defined in Data.Num.Linear

Methods

fromInteger :: Integer %1 -> Int64 Source #

FromInteger Int8 Source # 
Instance details

Defined in Data.Num.Linear

Methods

fromInteger :: Integer %1 -> Int8 Source #

FromInteger Word16 Source # 
Instance details

Defined in Data.Num.Linear

FromInteger Word32 Source # 
Instance details

Defined in Data.Num.Linear

FromInteger Word64 Source # 
Instance details

Defined in Data.Num.Linear

FromInteger Word8 Source # 
Instance details

Defined in Data.Num.Linear

Methods

fromInteger :: Integer %1 -> Word8 Source #

FromInteger Integer Source # 
Instance details

Defined in Data.Num.Linear

FromInteger Natural Source # 
Instance details

Defined in Data.Num.Linear

FromInteger Double Source # 
Instance details

Defined in Data.Num.Linear

FromInteger Float Source # 
Instance details

Defined in Data.Num.Linear

Methods

fromInteger :: Integer %1 -> Float Source #

FromInteger Int Source # 
Instance details

Defined in Data.Num.Linear

Methods

fromInteger :: Integer %1 -> Int Source #

FromInteger Word Source # 
Instance details

Defined in Data.Num.Linear

Methods

fromInteger :: Integer %1 -> Word Source #

Mechanisms for deriving instances

newtype Adding a Source #

Deprecated: Use Sum (reexported as Sum) instead

A newtype wrapper to give the underlying monoid for an additive structure.

Deprecated because Sum (reexported as Sum) now has a linear Semigroup and Monoid instance.

Constructors

Adding a

Deprecated: Use Sum (reexported as Sum) instead

Instances

Instances details
AddIdentity a => Monoid (Adding a) Source # 
Instance details

Defined in Data.Num.Linear

Methods

mempty :: Adding a #

mappend :: Adding a -> Adding a -> Adding a #

mconcat :: [Adding a] -> Adding a #

Additive a => Semigroup (Adding a) Source # 
Instance details

Defined in Data.Num.Linear

Methods

(<>) :: Adding a -> Adding a -> Adding a #

sconcat :: NonEmpty (Adding a) -> Adding a #

stimes :: Integral b => b -> Adding a -> Adding a #

Show a => Show (Adding a) Source # 
Instance details

Defined in Data.Num.Linear

Methods

showsPrec :: Int -> Adding a -> ShowS #

show :: Adding a -> String #

showList :: [Adding a] -> ShowS #

Eq a => Eq (Adding a) Source # 
Instance details

Defined in Data.Num.Linear

Methods

(==) :: Adding a -> Adding a -> Bool #

(/=) :: Adding a -> Adding a -> Bool #

Ord a => Ord (Adding a) Source # 
Instance details

Defined in Data.Num.Linear

Methods

compare :: Adding a -> Adding a -> Ordering #

(<) :: Adding a -> Adding a -> Bool #

(<=) :: Adding a -> Adding a -> Bool #

(>) :: Adding a -> Adding a -> Bool #

(>=) :: Adding a -> Adding a -> Bool #

max :: Adding a -> Adding a -> Adding a #

min :: Adding a -> Adding a -> Adding a #

AddIdentity a => Monoid (Adding a) Source # 
Instance details

Defined in Data.Num.Linear

Methods

mempty :: Adding a Source #

Additive a => Semigroup (Adding a) Source # 
Instance details

Defined in Data.Num.Linear

Methods

(<>) :: Adding a %1 -> Adding a %1 -> Adding a Source #

getAdded :: Adding a %1 -> a Source #

Deprecated: Use Sum (reexported as Sum) and pattern-match to extract the inner value linearly

newtype Multiplying a Source #

Deprecated: Use Product (reexported as Product) instead

A newtype wrapper to give the underlying monoid for a multiplicative structure.

Deprecated because Product (reexported as Product) now has a linear Semigroup and Monoid instance.

Constructors

Multiplying a

Deprecated: Use Product (reexported as Product) instead

Instances

Instances details
MultIdentity a => Monoid (Multiplying a) Source # 
Instance details

Defined in Data.Num.Linear

Multiplicative a => Semigroup (Multiplying a) Source # 
Instance details

Defined in Data.Num.Linear

Show a => Show (Multiplying a) Source # 
Instance details

Defined in Data.Num.Linear

Eq a => Eq (Multiplying a) Source # 
Instance details

Defined in Data.Num.Linear

Ord a => Ord (Multiplying a) Source # 
Instance details

Defined in Data.Num.Linear

MultIdentity a => Monoid (Multiplying a) Source # 
Instance details

Defined in Data.Num.Linear

Multiplicative a => Semigroup (Multiplying a) Source # 
Instance details

Defined in Data.Num.Linear

Methods

(<>) :: Multiplying a %1 -> Multiplying a %1 -> Multiplying a Source #

getMultiplied :: Multiplying a %1 -> a Source #

Deprecated: Use Product (reexported as Product) and pattern-match to extract the inner value linearly

Orphan instances

MultIdentity a => Monoid (Product a) Source # 
Instance details

Methods

mempty :: Product a Source #

AddIdentity a => Monoid (Sum a) Source # 
Instance details

Methods

mempty :: Sum a Source #

Multiplicative a => Semigroup (Product a) Source # 
Instance details

Methods

(<>) :: Product a %1 -> Product a %1 -> Product a Source #

Additive a => Semigroup (Sum a) Source # 
Instance details

Methods

(<>) :: Sum a %1 -> Sum a %1 -> Sum a Source #