| Safe Haskell | None |
|---|---|
| Language | Haskell98 |
Data.Semiring
Description
A class for semirings (types with two binary operations, one commutative and one associative, and two respective identities), with various general-purpose instances.
Synopsis
- class Semiring a where
- (+) :: Semiring a => a -> a -> a
- (*) :: Semiring a => a -> a -> a
- (^) :: (Semiring a, Integral b) => a -> b -> a
- foldMapP :: (Foldable t, Semiring s) => (a -> s) -> t a -> s
- foldMapT :: (Foldable t, Semiring s) => (a -> s) -> t a -> s
- sum :: (Foldable t, Semiring a) => t a -> a
- product :: (Foldable t, Semiring a) => t a -> a
- sum' :: (Foldable t, Semiring a) => t a -> a
- product' :: (Foldable t, Semiring a) => t a -> a
- isZero :: (Eq a, Semiring a) => a -> Bool
- isOne :: (Eq a, Semiring a) => a -> Bool
- newtype Add a = Add {
- getAdd :: a
- newtype Mul a = Mul {
- getMul :: a
- newtype WrappedNum a = WrapNum {
- unwrapNum :: a
- newtype Mod2 = Mod2 {}
- newtype IntSetOf a = IntSetOf {}
- newtype IntMapOf k v = IntMapOf {}
- class Semiring a => Ring a where
- negate :: a -> a
- fromInteger :: Ring a => Integer -> a
- fromIntegral :: (Integral a, Ring b) => a -> b
- minus :: Ring a => a -> a -> a
- (-) :: Ring a => a -> a -> a
Semiring typeclass
The class of semirings (types with two binary
operations and two respective identities). One
can think of a semiring as two monoids of the same
underlying type, with the first being commutative.
In the documentation, you will often see the first
monoid being referred to as additive, and the second
monoid being referred to as multiplicative, a typical
convention when talking about semirings.
For any type R with a Num
instance, the additive monoid is (R, +, 0)
and the multiplicative monoid is (R, *, 1).
For Bool, the additive monoid is (Bool, ||, False)
and the multiplicative monoid is (Bool, &&, True).
Instances should satisfy the following laws:
- additive left identity
zero+x = x- additive right identity
x+zero= x- additive associativity
x+(y+z) = (x+y)+z- additive commutativity
x+y = y+x- multiplicative left identity
one*x = x- multiplicative right identity
x*one= x- multiplicative associativity
x*(y*z) = (x*y)*z- left-distributivity of
*over+ x*(y+z) = (x*y)+(x*z)- right-distributivity of
*over+ (x+y)*z = (x*z)+(y*z)- annihilation
zero*x = x*zero=zero
Minimal complete definition
plus, times, (zero, one | fromNatural)
Methods
Arguments
| :: a | |
| -> a | |
| -> a | Commutative Operation |
Arguments
| :: a | Commutative Unit |
Arguments
| :: a | |
| -> a | |
| -> a | Associative Operation |
Arguments
| :: a | Associative Unit |
Arguments
| :: Natural | |
| -> a | Homomorphism of additive semigroups |
Instances
(^) :: (Semiring a, Integral b) => a -> b -> a infixr 8 #
Raise a number to a non-negative integral power.
If the power is negative, this will call error.
foldMapP :: (Foldable t, Semiring s) => (a -> s) -> t a -> s #
Map each element of the structure to a semiring, and combine the results
using plus.
foldMapT :: (Foldable t, Semiring s) => (a -> s) -> t a -> s #
Map each element of the structure to a semiring, and combine the results
using times.
Types
Instances
| Foldable Add # | |||||
Defined in Data.Semiring Methods fold :: Monoid m => Add m -> m # foldMap :: Monoid m => (a -> m) -> Add a -> m # foldMap' :: Monoid m => (a -> m) -> Add a -> m # foldr :: (a -> b -> b) -> b -> Add a -> b # foldr' :: (a -> b -> b) -> b -> Add a -> b # foldl :: (b -> a -> b) -> b -> Add a -> b # foldl' :: (b -> a -> b) -> b -> Add a -> b # foldr1 :: (a -> a -> a) -> Add a -> a # foldl1 :: (a -> a -> a) -> Add a -> a # elem :: Eq a => a -> Add a -> Bool # maximum :: Ord a => Add a -> a # | |||||
| Traversable Add # | |||||
| Functor Add # | |||||
| Generic1 Add # | |||||
Defined in Data.Semiring Associated Types
| |||||
| Storable a => Storable (Add a) # | |||||
| Semiring a => Monoid (Add a) # | |||||
| Semiring a => Semigroup (Add a) # | |||||
| Bounded a => Bounded (Add a) # | |||||
| Enum a => Enum (Add a) # | |||||
| Generic (Add a) # | |||||
Defined in Data.Semiring Associated Types
| |||||
| Num a => Num (Add a) # | |||||
| Read a => Read (Add a) # | |||||
| Fractional a => Fractional (Add a) # | |||||
| Real a => Real (Add a) # | |||||
Defined in Data.Semiring Methods toRational :: Add a -> Rational # | |||||
| RealFrac a => RealFrac (Add a) # | |||||
| Show a => Show (Add a) # | |||||
| Eq a => Eq (Add a) # | |||||
| Ord a => Ord (Add a) # | |||||
| type Rep1 Add # | |||||
Defined in Data.Semiring | |||||
| type Rep (Add a) # | |||||
Defined in Data.Semiring | |||||
Instances
| Foldable Mul # | |||||
Defined in Data.Semiring Methods fold :: Monoid m => Mul m -> m # foldMap :: Monoid m => (a -> m) -> Mul a -> m # foldMap' :: Monoid m => (a -> m) -> Mul a -> m # foldr :: (a -> b -> b) -> b -> Mul a -> b # foldr' :: (a -> b -> b) -> b -> Mul a -> b # foldl :: (b -> a -> b) -> b -> Mul a -> b # foldl' :: (b -> a -> b) -> b -> Mul a -> b # foldr1 :: (a -> a -> a) -> Mul a -> a # foldl1 :: (a -> a -> a) -> Mul a -> a # elem :: Eq a => a -> Mul a -> Bool # maximum :: Ord a => Mul a -> a # | |||||
| Traversable Mul # | |||||
| Functor Mul # | |||||
| Generic1 Mul # | |||||
Defined in Data.Semiring Associated Types
| |||||
| Storable a => Storable (Mul a) # | |||||
| Semiring a => Monoid (Mul a) # | |||||
| Semiring a => Semigroup (Mul a) # | |||||
| Bounded a => Bounded (Mul a) # | |||||
| Enum a => Enum (Mul a) # | |||||
| Generic (Mul a) # | |||||
Defined in Data.Semiring Associated Types
| |||||
| Num a => Num (Mul a) # | |||||
| Read a => Read (Mul a) # | |||||
| Fractional a => Fractional (Mul a) # | |||||
| Real a => Real (Mul a) # | |||||
Defined in Data.Semiring Methods toRational :: Mul a -> Rational # | |||||
| RealFrac a => RealFrac (Mul a) # | |||||
| Show a => Show (Mul a) # | |||||
| Eq a => Eq (Mul a) # | |||||
| Ord a => Ord (Mul a) # | |||||
| type Rep1 Mul # | |||||
Defined in Data.Semiring | |||||
| type Rep (Mul a) # | |||||
Defined in Data.Semiring | |||||
newtype WrappedNum a #
Provide Semiring and Ring for an arbitrary Num. It is useful with GHC 8.6+'s DerivingVia extension.
Instances
Mod2 represents the integers mod 2.
It is useful in the computing of Zhegalkin polynomials.
Instances
| Bounded Mod2 # | |||||
| Enum Mod2 # | |||||
| Generic Mod2 # | |||||
Defined in Data.Semiring Associated Types
| |||||
| Read Mod2 # | |||||
| Show Mod2 # | |||||
| Eq Mod2 # | |||||
| Ord Mod2 # | |||||
| Euclidean Mod2 # | |||||
| Field Mod2 # | |||||
Defined in Data.Euclidean | |||||
| GcdDomain Mod2 # | |||||
| Ring Mod2 # | |||||
Defined in Data.Semiring | |||||
| Semiring Mod2 # | |||||
| Star Mod2 # | |||||
| type Rep Mod2 # | |||||
Defined in Data.Semiring | |||||
Wrapper to mimic Set (Sum Int),
Set (Product Int), etc.,
while having a more efficient underlying representation.
Instances
| Generic1 IntSetOf # | |||||
Defined in Data.Semiring Associated Types
| |||||
| Monoid (IntSetOf a) # | |||||
| Semigroup (IntSetOf a) # | |||||
| Generic (IntSetOf a) # | |||||
Defined in Data.Semiring Associated Types
| |||||
| Read (IntSetOf a) # | |||||
| Show (IntSetOf a) # | |||||
| Eq (IntSetOf a) # | |||||
| Ord (IntSetOf a) # | |||||
| (Coercible Int a, Monoid a) => Semiring (IntSetOf a) # | |||||
| type Rep1 IntSetOf # | |||||
Defined in Data.Semiring | |||||
| type Rep (IntSetOf a) # | |||||
Defined in Data.Semiring | |||||
Wrapper to mimic Map (Sum Int) v,
Map (Product Int) v, etc.,
while having a more efficient underlying representation.
Instances
| Generic1 (IntMapOf k :: Type -> Type) # | |||||
Defined in Data.Semiring Associated Types
| |||||
| Monoid (IntMapOf k v) # | |||||
| Semigroup (IntMapOf k v) # | |||||
| Generic (IntMapOf k v) # | |||||
Defined in Data.Semiring Associated Types
| |||||
| Read v => Read (IntMapOf k v) # | |||||
| Show v => Show (IntMapOf k v) # | |||||
| Eq v => Eq (IntMapOf k v) # | |||||
| Ord v => Ord (IntMapOf k v) # | |||||
Defined in Data.Semiring | |||||
| (Coercible Int k, Monoid k, Semiring v) => Semiring (IntMapOf k v) # | |||||
| type Rep1 (IntMapOf k :: Type -> Type) # | |||||
Defined in Data.Semiring | |||||
| type Rep (IntMapOf k v) # | |||||
Defined in Data.Semiring | |||||
Ring typeclass
class Semiring a => Ring a where #
Instances
| Ring CChar # | |
Defined in Data.Semiring | |
| Ring CClock # | |
Defined in Data.Semiring | |
| Ring CDouble # | |
Defined in Data.Semiring | |
| Ring CFloat # | |
Defined in Data.Semiring | |
| Ring CInt # | |
Defined in Data.Semiring | |
| Ring CIntMax # | |
Defined in Data.Semiring | |
| Ring CIntPtr # | |
Defined in Data.Semiring | |
| Ring CLLong # | |
Defined in Data.Semiring | |
| Ring CLong # | |
Defined in Data.Semiring | |
| Ring CPtrdiff # | |
Defined in Data.Semiring | |
| Ring CSChar # | |
Defined in Data.Semiring | |
| Ring CSUSeconds # | |
Defined in Data.Semiring Methods negate :: CSUSeconds -> CSUSeconds # | |
| Ring CShort # | |
Defined in Data.Semiring | |
| Ring CSigAtomic # | |
Defined in Data.Semiring Methods negate :: CSigAtomic -> CSigAtomic # | |
| Ring CSize # | |
Defined in Data.Semiring | |
| Ring CTime # | |
Defined in Data.Semiring | |
| Ring CUChar # | |
Defined in Data.Semiring | |
| Ring CUInt # | |
Defined in Data.Semiring | |
| Ring CUIntMax # | |
Defined in Data.Semiring | |
| Ring CUIntPtr # | |
Defined in Data.Semiring | |
| Ring CULLong # | |
Defined in Data.Semiring | |
| Ring CULong # | |
Defined in Data.Semiring | |
| Ring CUSeconds # | |
Defined in Data.Semiring | |
| Ring CUShort # | |
Defined in Data.Semiring | |
| Ring CWchar # | |
Defined in Data.Semiring | |
| Ring IntPtr # | |
Defined in Data.Semiring | |
| Ring WordPtr # | |
Defined in Data.Semiring | |
| Ring Int16 # | |
Defined in Data.Semiring | |
| Ring Int32 # | |
Defined in Data.Semiring | |
| Ring Int64 # | |
Defined in Data.Semiring | |
| Ring Int8 # | |
Defined in Data.Semiring | |
| Ring Word16 # | |
Defined in Data.Semiring | |
| Ring Word32 # | |
Defined in Data.Semiring | |
| Ring Word64 # | |
Defined in Data.Semiring | |
| Ring Word8 # | |
Defined in Data.Semiring | |
| Ring CCc # | |
Defined in Data.Semiring | |
| Ring CDev # | |
Defined in Data.Semiring | |
| Ring CGid # | |
Defined in Data.Semiring | |
| Ring CIno # | |
Defined in Data.Semiring | |
| Ring CMode # | |
Defined in Data.Semiring | |
| Ring CNlink # | |
Defined in Data.Semiring | |
| Ring COff # | |
Defined in Data.Semiring | |
| Ring CPid # | |
Defined in Data.Semiring | |
| Ring CRLim # | |
Defined in Data.Semiring | |
| Ring CSpeed # | |
Defined in Data.Semiring | |
| Ring CSsize # | |
Defined in Data.Semiring | |
| Ring CTcflag # | |
Defined in Data.Semiring | |
| Ring CUid # | |
Defined in Data.Semiring | |
| Ring Fd # | |
Defined in Data.Semiring | |
| Ring Mod2 # | |
Defined in Data.Semiring | |
| Ring Integer # | |
Defined in Data.Semiring | |
| Ring () # | |
Defined in Data.Semiring | |
| Ring Double # | |
Defined in Data.Semiring | |
| Ring Float # | |
Defined in Data.Semiring | |
| Ring Int # | |
Defined in Data.Semiring | |
| Ring Word # | |
Defined in Data.Semiring | |
| Ring a => Ring (Complex a) # | |
Defined in Data.Semiring | |
| Ring a => Ring (Identity a) # | |
Defined in Data.Semiring | |
| Ring a => Ring (Down a) # | |
Defined in Data.Semiring | |
| Ring a => Ring (Dual a) # | |
Defined in Data.Semiring | |
| Integral a => Ring (Ratio a) # | |
Defined in Data.Semiring | |
| Ring a => Ring (IO a) # | |
Defined in Data.Semiring | |
| Num a => Ring (WrappedFractional a) # | |
Defined in Data.Euclidean Methods negate :: WrappedFractional a -> WrappedFractional a # | |
| Num a => Ring (WrappedIntegral a) # | |
Defined in Data.Euclidean Methods negate :: WrappedIntegral a -> WrappedIntegral a # | |
| Num a => Ring (WrappedNum a) # | |
Defined in Data.Semiring Methods negate :: WrappedNum a -> WrappedNum a # | |
| HasResolution a => Ring (Fixed a) # | |
Defined in Data.Semiring | |
| Ring a => Ring (Op a b) # | |
Defined in Data.Semiring | |
| (Ring a, Ring b) => Ring (a, b) # | |
Defined in Data.Semiring.Generic | |
| Ring b => Ring (a -> b) # | |
Defined in Data.Semiring | |
| Ring a => Ring (Const a b) # | |
Defined in Data.Semiring | |
| (Ring a, Applicative f) => Ring (Ap f a) # | |
Defined in Data.Semiring | |
| (Ring a, Ring b, Ring c) => Ring (a, b, c) # | |
Defined in Data.Semiring.Generic | |
| (Ring a, Ring b, Ring c, Ring d) => Ring (a, b, c, d) # | |
Defined in Data.Semiring.Generic | |
| (Ring a, Ring b, Ring c, Ring d, Ring e) => Ring (a, b, c, d, e) # | |
Defined in Data.Semiring.Generic | |
| (Ring a, Ring b, Ring c, Ring d, Ring e, Ring f) => Ring (a, b, c, d, e, f) # | |
Defined in Data.Semiring.Generic | |
| (Ring a, Ring b, Ring c, Ring d, Ring e, Ring f, Ring g) => Ring (a, b, c, d, e, f, g) # | |
Defined in Data.Semiring.Generic | |
fromInteger :: Ring a => Integer -> a #
fromIntegral :: (Integral a, Ring b) => a -> b #
Convert from integral to ring.