semirings-0.6: two monoids as one, in holy haskimony
Safe HaskellSafe-Inferred
LanguageHaskell98

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

Semiring typeclass

class Semiring a where #

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

plus infixl 6 #

Arguments

:: a 
-> a 
-> a

Commutative Operation

zero #

Arguments

:: a

Commutative Unit

times infixl 7 #

Arguments

:: a 
-> a 
-> a

Associative Operation

one #

Arguments

:: a

Associative Unit

fromNatural #

Arguments

:: Natural 
-> a

Homomorphism of additive semigroups

Instances

Instances details
Semiring CChar # 
Instance details

Defined in Data.Semiring

Methods

plus :: CChar -> CChar -> CChar #

zero :: CChar #

times :: CChar -> CChar -> CChar #

one :: CChar #

fromNatural :: Natural -> CChar #

Semiring CClock # 
Instance details

Defined in Data.Semiring

Methods

plus :: CClock -> CClock -> CClock #

zero :: CClock #

times :: CClock -> CClock -> CClock #

one :: CClock #

fromNatural :: Natural -> CClock #

Semiring CDouble # 
Instance details

Defined in Data.Semiring

Methods

plus :: CDouble -> CDouble -> CDouble #

zero :: CDouble #

times :: CDouble -> CDouble -> CDouble #

one :: CDouble #

fromNatural :: Natural -> CDouble #

Semiring CFloat # 
Instance details

Defined in Data.Semiring

Methods

plus :: CFloat -> CFloat -> CFloat #

zero :: CFloat #

times :: CFloat -> CFloat -> CFloat #

one :: CFloat #

fromNatural :: Natural -> CFloat #

Semiring CInt # 
Instance details

Defined in Data.Semiring

Methods

plus :: CInt -> CInt -> CInt #

zero :: CInt #

times :: CInt -> CInt -> CInt #

one :: CInt #

fromNatural :: Natural -> CInt #

Semiring CIntMax # 
Instance details

Defined in Data.Semiring

Methods

plus :: CIntMax -> CIntMax -> CIntMax #

zero :: CIntMax #

times :: CIntMax -> CIntMax -> CIntMax #

one :: CIntMax #

fromNatural :: Natural -> CIntMax #

Semiring CIntPtr # 
Instance details

Defined in Data.Semiring

Methods

plus :: CIntPtr -> CIntPtr -> CIntPtr #

zero :: CIntPtr #

times :: CIntPtr -> CIntPtr -> CIntPtr #

one :: CIntPtr #

fromNatural :: Natural -> CIntPtr #

Semiring CLLong # 
Instance details

Defined in Data.Semiring

Methods

plus :: CLLong -> CLLong -> CLLong #

zero :: CLLong #

times :: CLLong -> CLLong -> CLLong #

one :: CLLong #

fromNatural :: Natural -> CLLong #

Semiring CLong # 
Instance details

Defined in Data.Semiring

Methods

plus :: CLong -> CLong -> CLong #

zero :: CLong #

times :: CLong -> CLong -> CLong #

one :: CLong #

fromNatural :: Natural -> CLong #

Semiring CPtrdiff # 
Instance details

Defined in Data.Semiring

Methods

plus :: CPtrdiff -> CPtrdiff -> CPtrdiff #

zero :: CPtrdiff #

times :: CPtrdiff -> CPtrdiff -> CPtrdiff #

one :: CPtrdiff #

fromNatural :: Natural -> CPtrdiff #

Semiring CSChar # 
Instance details

Defined in Data.Semiring

Methods

plus :: CSChar -> CSChar -> CSChar #

zero :: CSChar #

times :: CSChar -> CSChar -> CSChar #

one :: CSChar #

fromNatural :: Natural -> CSChar #

Semiring CSUSeconds # 
Instance details

Defined in Data.Semiring

Methods

plus :: CSUSeconds -> CSUSeconds -> CSUSeconds #

zero :: CSUSeconds #

times :: CSUSeconds -> CSUSeconds -> CSUSeconds #

one :: CSUSeconds #

fromNatural :: Natural -> CSUSeconds #

Semiring CShort # 
Instance details

Defined in Data.Semiring

Methods

plus :: CShort -> CShort -> CShort #

zero :: CShort #

times :: CShort -> CShort -> CShort #

one :: CShort #

fromNatural :: Natural -> CShort #

Semiring CSigAtomic # 
Instance details

Defined in Data.Semiring

Methods

plus :: CSigAtomic -> CSigAtomic -> CSigAtomic #

zero :: CSigAtomic #

times :: CSigAtomic -> CSigAtomic -> CSigAtomic #

one :: CSigAtomic #

fromNatural :: Natural -> CSigAtomic #

Semiring CSize # 
Instance details

Defined in Data.Semiring

Methods

plus :: CSize -> CSize -> CSize #

zero :: CSize #

times :: CSize -> CSize -> CSize #

one :: CSize #

fromNatural :: Natural -> CSize #

Semiring CTime # 
Instance details

Defined in Data.Semiring

Methods

plus :: CTime -> CTime -> CTime #

zero :: CTime #

times :: CTime -> CTime -> CTime #

one :: CTime #

fromNatural :: Natural -> CTime #

Semiring CUChar # 
Instance details

Defined in Data.Semiring

Methods

plus :: CUChar -> CUChar -> CUChar #

zero :: CUChar #

times :: CUChar -> CUChar -> CUChar #

one :: CUChar #

fromNatural :: Natural -> CUChar #

Semiring CUInt # 
Instance details

Defined in Data.Semiring

Methods

plus :: CUInt -> CUInt -> CUInt #

zero :: CUInt #

times :: CUInt -> CUInt -> CUInt #

one :: CUInt #

fromNatural :: Natural -> CUInt #

Semiring CUIntMax # 
Instance details

Defined in Data.Semiring

Methods

plus :: CUIntMax -> CUIntMax -> CUIntMax #

zero :: CUIntMax #

times :: CUIntMax -> CUIntMax -> CUIntMax #

one :: CUIntMax #

fromNatural :: Natural -> CUIntMax #

Semiring CUIntPtr # 
Instance details

Defined in Data.Semiring

Methods

plus :: CUIntPtr -> CUIntPtr -> CUIntPtr #

zero :: CUIntPtr #

times :: CUIntPtr -> CUIntPtr -> CUIntPtr #

one :: CUIntPtr #

fromNatural :: Natural -> CUIntPtr #

Semiring CULLong # 
Instance details

Defined in Data.Semiring

Methods

plus :: CULLong -> CULLong -> CULLong #

zero :: CULLong #

times :: CULLong -> CULLong -> CULLong #

one :: CULLong #

fromNatural :: Natural -> CULLong #

Semiring CULong # 
Instance details

Defined in Data.Semiring

Methods

plus :: CULong -> CULong -> CULong #

zero :: CULong #

times :: CULong -> CULong -> CULong #

one :: CULong #

fromNatural :: Natural -> CULong #

Semiring CUSeconds # 
Instance details

Defined in Data.Semiring

Methods

plus :: CUSeconds -> CUSeconds -> CUSeconds #

zero :: CUSeconds #

times :: CUSeconds -> CUSeconds -> CUSeconds #

one :: CUSeconds #

fromNatural :: Natural -> CUSeconds #

Semiring CUShort # 
Instance details

Defined in Data.Semiring

Methods

plus :: CUShort -> CUShort -> CUShort #

zero :: CUShort #

times :: CUShort -> CUShort -> CUShort #

one :: CUShort #

fromNatural :: Natural -> CUShort #

Semiring CWchar # 
Instance details

Defined in Data.Semiring

Methods

plus :: CWchar -> CWchar -> CWchar #

zero :: CWchar #

times :: CWchar -> CWchar -> CWchar #

one :: CWchar #

fromNatural :: Natural -> CWchar #

Semiring IntPtr # 
Instance details

Defined in Data.Semiring

Methods

plus :: IntPtr -> IntPtr -> IntPtr #

zero :: IntPtr #

times :: IntPtr -> IntPtr -> IntPtr #

one :: IntPtr #

fromNatural :: Natural -> IntPtr #

Semiring WordPtr # 
Instance details

Defined in Data.Semiring

Methods

plus :: WordPtr -> WordPtr -> WordPtr #

zero :: WordPtr #

times :: WordPtr -> WordPtr -> WordPtr #

one :: WordPtr #

fromNatural :: Natural -> WordPtr #

Semiring Int16 # 
Instance details

Defined in Data.Semiring

Methods

plus :: Int16 -> Int16 -> Int16 #

zero :: Int16 #

times :: Int16 -> Int16 -> Int16 #

one :: Int16 #

fromNatural :: Natural -> Int16 #

Semiring Int32 # 
Instance details

Defined in Data.Semiring

Methods

plus :: Int32 -> Int32 -> Int32 #

zero :: Int32 #

times :: Int32 -> Int32 -> Int32 #

one :: Int32 #

fromNatural :: Natural -> Int32 #

Semiring Int64 # 
Instance details

Defined in Data.Semiring

Methods

plus :: Int64 -> Int64 -> Int64 #

zero :: Int64 #

times :: Int64 -> Int64 -> Int64 #

one :: Int64 #

fromNatural :: Natural -> Int64 #

Semiring Int8 # 
Instance details

Defined in Data.Semiring

Methods

plus :: Int8 -> Int8 -> Int8 #

zero :: Int8 #

times :: Int8 -> Int8 -> Int8 #

one :: Int8 #

fromNatural :: Natural -> Int8 #

Semiring Word16 # 
Instance details

Defined in Data.Semiring

Methods

plus :: Word16 -> Word16 -> Word16 #

zero :: Word16 #

times :: Word16 -> Word16 -> Word16 #

one :: Word16 #

fromNatural :: Natural -> Word16 #

Semiring Word32 # 
Instance details

Defined in Data.Semiring

Methods

plus :: Word32 -> Word32 -> Word32 #

zero :: Word32 #

times :: Word32 -> Word32 -> Word32 #

one :: Word32 #

fromNatural :: Natural -> Word32 #

Semiring Word64 # 
Instance details

Defined in Data.Semiring

Methods

plus :: Word64 -> Word64 -> Word64 #

zero :: Word64 #

times :: Word64 -> Word64 -> Word64 #

one :: Word64 #

fromNatural :: Natural -> Word64 #

Semiring Word8 # 
Instance details

Defined in Data.Semiring

Methods

plus :: Word8 -> Word8 -> Word8 #

zero :: Word8 #

times :: Word8 -> Word8 -> Word8 #

one :: Word8 #

fromNatural :: Natural -> Word8 #

Semiring CCc # 
Instance details

Defined in Data.Semiring

Methods

plus :: CCc -> CCc -> CCc #

zero :: CCc #

times :: CCc -> CCc -> CCc #

one :: CCc #

fromNatural :: Natural -> CCc #

Semiring CDev # 
Instance details

Defined in Data.Semiring

Methods

plus :: CDev -> CDev -> CDev #

zero :: CDev #

times :: CDev -> CDev -> CDev #

one :: CDev #

fromNatural :: Natural -> CDev #

Semiring CGid # 
Instance details

Defined in Data.Semiring

Methods

plus :: CGid -> CGid -> CGid #

zero :: CGid #

times :: CGid -> CGid -> CGid #

one :: CGid #

fromNatural :: Natural -> CGid #

Semiring CIno # 
Instance details

Defined in Data.Semiring

Methods

plus :: CIno -> CIno -> CIno #

zero :: CIno #

times :: CIno -> CIno -> CIno #

one :: CIno #

fromNatural :: Natural -> CIno #

Semiring CMode # 
Instance details

Defined in Data.Semiring

Methods

plus :: CMode -> CMode -> CMode #

zero :: CMode #

times :: CMode -> CMode -> CMode #

one :: CMode #

fromNatural :: Natural -> CMode #

Semiring CNlink # 
Instance details

Defined in Data.Semiring

Methods

plus :: CNlink -> CNlink -> CNlink #

zero :: CNlink #

times :: CNlink -> CNlink -> CNlink #

one :: CNlink #

fromNatural :: Natural -> CNlink #

Semiring COff # 
Instance details

Defined in Data.Semiring

Methods

plus :: COff -> COff -> COff #

zero :: COff #

times :: COff -> COff -> COff #

one :: COff #

fromNatural :: Natural -> COff #

Semiring CPid # 
Instance details

Defined in Data.Semiring

Methods

plus :: CPid -> CPid -> CPid #

zero :: CPid #

times :: CPid -> CPid -> CPid #

one :: CPid #

fromNatural :: Natural -> CPid #

Semiring CRLim # 
Instance details

Defined in Data.Semiring

Methods

plus :: CRLim -> CRLim -> CRLim #

zero :: CRLim #

times :: CRLim -> CRLim -> CRLim #

one :: CRLim #

fromNatural :: Natural -> CRLim #

Semiring CSpeed # 
Instance details

Defined in Data.Semiring

Methods

plus :: CSpeed -> CSpeed -> CSpeed #

zero :: CSpeed #

times :: CSpeed -> CSpeed -> CSpeed #

one :: CSpeed #

fromNatural :: Natural -> CSpeed #

Semiring CSsize # 
Instance details

Defined in Data.Semiring

Methods

plus :: CSsize -> CSsize -> CSsize #

zero :: CSsize #

times :: CSsize -> CSsize -> CSsize #

one :: CSsize #

fromNatural :: Natural -> CSsize #

Semiring CTcflag # 
Instance details

Defined in Data.Semiring

Methods

plus :: CTcflag -> CTcflag -> CTcflag #

zero :: CTcflag #

times :: CTcflag -> CTcflag -> CTcflag #

one :: CTcflag #

fromNatural :: Natural -> CTcflag #

Semiring CUid # 
Instance details

Defined in Data.Semiring

Methods

plus :: CUid -> CUid -> CUid #

zero :: CUid #

times :: CUid -> CUid -> CUid #

one :: CUid #

fromNatural :: Natural -> CUid #

Semiring Fd # 
Instance details

Defined in Data.Semiring

Methods

plus :: Fd -> Fd -> Fd #

zero :: Fd #

times :: Fd -> Fd -> Fd #

one :: Fd #

fromNatural :: Natural -> Fd #

Semiring Mod2 # 
Instance details

Defined in Data.Semiring

Methods

plus :: Mod2 -> Mod2 -> Mod2 #

zero :: Mod2 #

times :: Mod2 -> Mod2 -> Mod2 #

one :: Mod2 #

fromNatural :: Natural -> Mod2 #

Semiring Integer # 
Instance details

Defined in Data.Semiring

Methods

plus :: Integer -> Integer -> Integer #

zero :: Integer #

times :: Integer -> Integer -> Integer #

one :: Integer #

fromNatural :: Natural -> Integer #

Semiring Natural # 
Instance details

Defined in Data.Semiring

Methods

plus :: Natural -> Natural -> Natural #

zero :: Natural #

times :: Natural -> Natural -> Natural #

one :: Natural #

fromNatural :: Natural -> Natural #

Semiring () # 
Instance details

Defined in Data.Semiring

Methods

plus :: () -> () -> () #

zero :: () #

times :: () -> () -> () #

one :: () #

fromNatural :: Natural -> () #

Semiring Bool # 
Instance details

Defined in Data.Semiring

Methods

plus :: Bool -> Bool -> Bool #

zero :: Bool #

times :: Bool -> Bool -> Bool #

one :: Bool #

fromNatural :: Natural -> Bool #

Semiring Double # 
Instance details

Defined in Data.Semiring

Methods

plus :: Double -> Double -> Double #

zero :: Double #

times :: Double -> Double -> Double #

one :: Double #

fromNatural :: Natural -> Double #

Semiring Float # 
Instance details

Defined in Data.Semiring

Methods

plus :: Float -> Float -> Float #

zero :: Float #

times :: Float -> Float -> Float #

one :: Float #

fromNatural :: Natural -> Float #

Semiring Int # 
Instance details

Defined in Data.Semiring

Methods

plus :: Int -> Int -> Int #

zero :: Int #

times :: Int -> Int -> Int #

one :: Int #

fromNatural :: Natural -> Int #

Semiring Word # 
Instance details

Defined in Data.Semiring

Methods

plus :: Word -> Word -> Word #

zero :: Word #

times :: Word -> Word -> Word #

one :: Word #

fromNatural :: Natural -> Word #

Ring a => Semiring (Complex a) #

This instance can suffer due to floating point arithmetic.

Instance details

Defined in Data.Semiring

Methods

plus :: Complex a -> Complex a -> Complex a #

zero :: Complex a #

times :: Complex a -> Complex a -> Complex a #

one :: Complex a #

fromNatural :: Natural -> Complex a #

Semiring a => Semiring (Equivalence a) # 
Instance details

Defined in Data.Semiring

Methods

plus :: Equivalence a -> Equivalence a -> Equivalence a #

zero :: Equivalence a #

times :: Equivalence a -> Equivalence a -> Equivalence a #

one :: Equivalence a #

fromNatural :: Natural -> Equivalence a #

Semiring (Predicate a) # 
Instance details

Defined in Data.Semiring

Methods

plus :: Predicate a -> Predicate a -> Predicate a #

zero :: Predicate a #

times :: Predicate a -> Predicate a -> Predicate a #

one :: Predicate a #

fromNatural :: Natural -> Predicate a #

Semiring a => Semiring (Identity a) # 
Instance details

Defined in Data.Semiring

Methods

plus :: Identity a -> Identity a -> Identity a #

zero :: Identity a #

times :: Identity a -> Identity a -> Identity a #

one :: Identity a #

fromNatural :: Natural -> Identity a #

Semiring a => Semiring (Down a) # 
Instance details

Defined in Data.Semiring

Methods

plus :: Down a -> Down a -> Down a #

zero :: Down a #

times :: Down a -> Down a -> Down a #

one :: Down a #

fromNatural :: Natural -> Down a #

Semiring a => Semiring (Dual a) # 
Instance details

Defined in Data.Semiring

Methods

plus :: Dual a -> Dual a -> Dual a #

zero :: Dual a #

times :: Dual a -> Dual a -> Dual a #

one :: Dual a #

fromNatural :: Natural -> Dual a #

Integral a => Semiring (Ratio a) # 
Instance details

Defined in Data.Semiring

Methods

plus :: Ratio a -> Ratio a -> Ratio a #

zero :: Ratio a #

times :: Ratio a -> Ratio a -> Ratio a #

one :: Ratio a #

fromNatural :: Natural -> Ratio a #

(Ord a, Monoid a) => Semiring (Set a) #

The multiplication laws are satisfied for any underlying Monoid, so we require a Monoid constraint instead of a Semiring constraint since times can use the context of either.

Instance details

Defined in Data.Semiring

Methods

plus :: Set a -> Set a -> Set a #

zero :: Set a #

times :: Set a -> Set a -> Set a #

one :: Set a #

fromNatural :: Natural -> Set a #

Semiring a => Semiring (IO a) # 
Instance details

Defined in Data.Semiring

Methods

plus :: IO a -> IO a -> IO a #

zero :: IO a #

times :: IO a -> IO a -> IO a #

one :: IO a #

fromNatural :: Natural -> IO a #

Num a => Semiring (WrappedFractional a) # 
Instance details

Defined in Data.Euclidean

Num a => Semiring (WrappedIntegral a) # 
Instance details

Defined in Data.Euclidean

(Coercible Int a, Monoid a) => Semiring (IntSetOf a) # 
Instance details

Defined in Data.Semiring

Methods

plus :: IntSetOf a -> IntSetOf a -> IntSetOf a #

zero :: IntSetOf a #

times :: IntSetOf a -> IntSetOf a -> IntSetOf a #

one :: IntSetOf a #

fromNatural :: Natural -> IntSetOf a #

Num a => Semiring (WrappedNum a) # 
Instance details

Defined in Data.Semiring

(Generic a, GSemiring (Rep a)) => Semiring (GenericSemiring a) # 
Instance details

Defined in Data.Semiring.Generic

(Eq a, Hashable a, Monoid a) => Semiring (HashSet a) #

The multiplication laws are satisfied for any underlying Monoid, so we require a Monoid constraint instead of a Semiring constraint since times can use the context of either.

Instance details

Defined in Data.Semiring

Methods

plus :: HashSet a -> HashSet a -> HashSet a #

zero :: HashSet a #

times :: HashSet a -> HashSet a -> HashSet a #

one :: HashSet a #

fromNatural :: Natural -> HashSet a #

Semiring a => Semiring (Maybe a) # 
Instance details

Defined in Data.Semiring

Methods

plus :: Maybe a -> Maybe a -> Maybe a #

zero :: Maybe a #

times :: Maybe a -> Maybe a -> Maybe a #

one :: Maybe a #

fromNatural :: Natural -> Maybe a #

HasResolution a => Semiring (Fixed a) # 
Instance details

Defined in Data.Semiring

Methods

plus :: Fixed a -> Fixed a -> Fixed a #

zero :: Fixed a #

times :: Fixed a -> Fixed a -> Fixed a #

one :: Fixed a #

fromNatural :: Natural -> Fixed a #

Semiring a => Semiring (Op a b) # 
Instance details

Defined in Data.Semiring

Methods

plus :: Op a b -> Op a b -> Op a b #

zero :: Op a b #

times :: Op a b -> Op a b -> Op a b #

one :: Op a b #

fromNatural :: Natural -> Op a b #

Semiring (Proxy a) # 
Instance details

Defined in Data.Semiring

Methods

plus :: Proxy a -> Proxy a -> Proxy a #

zero :: Proxy a #

times :: Proxy a -> Proxy a -> Proxy a #

one :: Proxy a #

fromNatural :: Natural -> Proxy a #

(Ord k, Monoid k, Semiring v) => Semiring (Map k v) #

The multiplication laws are satisfied for any underlying Monoid as the key type, so we require a Monoid constraint instead of a Semiring constraint since times can use the context of either.

Instance details

Defined in Data.Semiring

Methods

plus :: Map k v -> Map k v -> Map k v #

zero :: Map k v #

times :: Map k v -> Map k v -> Map k v #

one :: Map k v #

fromNatural :: Natural -> Map k v #

(Coercible Int k, Monoid k, Semiring v) => Semiring (IntMapOf k v) # 
Instance details

Defined in Data.Semiring

Methods

plus :: IntMapOf k v -> IntMapOf k v -> IntMapOf k v #

zero :: IntMapOf k v #

times :: IntMapOf k v -> IntMapOf k v -> IntMapOf k v #

one :: IntMapOf k v #

fromNatural :: Natural -> IntMapOf k v #

(Ord a, Monoid a, Extremum e) => Semiring (Tropical e a) # 
Instance details

Defined in Data.Semiring.Tropical

Methods

plus :: Tropical e a -> Tropical e a -> Tropical e a #

zero :: Tropical e a #

times :: Tropical e a -> Tropical e a -> Tropical e a #

one :: Tropical e a #

fromNatural :: Natural -> Tropical e a #

(Eq k, Hashable k, Monoid k, Semiring v) => Semiring (HashMap k v) #

The multiplication laws are satisfied for any underlying Monoid as the key type, so we require a Monoid constraint instead of a Semiring constraint since times can use the context of either.

Instance details

Defined in Data.Semiring

Methods

plus :: HashMap k v -> HashMap k v -> HashMap k v #

zero :: HashMap k v #

times :: HashMap k v -> HashMap k v -> HashMap k v #

one :: HashMap k v #

fromNatural :: Natural -> HashMap k v #

(Semiring a, Semiring b) => Semiring (a, b) # 
Instance details

Defined in Data.Semiring.Generic

Methods

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

zero :: (a, b) #

times :: (a, b) -> (a, b) -> (a, b) #

one :: (a, b) #

fromNatural :: Natural -> (a, b) #

Semiring b => Semiring (a -> b) # 
Instance details

Defined in Data.Semiring

Methods

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

zero :: a -> b #

times :: (a -> b) -> (a -> b) -> a -> b #

one :: a -> b #

fromNatural :: Natural -> a -> b #

Semiring a => Semiring (Const a b) # 
Instance details

Defined in Data.Semiring

Methods

plus :: Const a b -> Const a b -> Const a b #

zero :: Const a b #

times :: Const a b -> Const a b -> Const a b #

one :: Const a b #

fromNatural :: Natural -> Const a b #

(Semiring a, Applicative f) => Semiring (Ap f a) # 
Instance details

Defined in Data.Semiring

Methods

plus :: Ap f a -> Ap f a -> Ap f a #

zero :: Ap f a #

times :: Ap f a -> Ap f a -> Ap f a #

one :: Ap f a #

fromNatural :: Natural -> Ap f a #

(Semiring a, Semiring b, Semiring c) => Semiring (a, b, c) # 
Instance details

Defined in Data.Semiring.Generic

Methods

plus :: (a, b, c) -> (a, b, c) -> (a, b, c) #

zero :: (a, b, c) #

times :: (a, b, c) -> (a, b, c) -> (a, b, c) #

one :: (a, b, c) #

fromNatural :: Natural -> (a, b, c) #

(Semiring a, Semiring b, Semiring c, Semiring d) => Semiring (a, b, c, d) # 
Instance details

Defined in Data.Semiring.Generic

Methods

plus :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) #

zero :: (a, b, c, d) #

times :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) #

one :: (a, b, c, d) #

fromNatural :: Natural -> (a, b, c, d) #

(Semiring a, Semiring b, Semiring c, Semiring d, Semiring e) => Semiring (a, b, c, d, e) # 
Instance details

Defined in Data.Semiring.Generic

Methods

plus :: (a, b, c, d, e) -> (a, b, c, d, e) -> (a, b, c, d, e) #

zero :: (a, b, c, d, e) #

times :: (a, b, c, d, e) -> (a, b, c, d, e) -> (a, b, c, d, e) #

one :: (a, b, c, d, e) #

fromNatural :: Natural -> (a, b, c, d, e) #

(Semiring a, Semiring b, Semiring c, Semiring d, Semiring e, Semiring f) => Semiring (a, b, c, d, e, f) # 
Instance details

Defined in Data.Semiring.Generic

Methods

plus :: (a, b, c, d, e, f) -> (a, b, c, d, e, f) -> (a, b, c, d, e, f) #

zero :: (a, b, c, d, e, f) #

times :: (a, b, c, d, e, f) -> (a, b, c, d, e, f) -> (a, b, c, d, e, f) #

one :: (a, b, c, d, e, f) #

fromNatural :: Natural -> (a, b, c, d, e, f) #

(Semiring a, Semiring b, Semiring c, Semiring d, Semiring e, Semiring f, Semiring g) => Semiring (a, b, c, d, e, f, g) # 
Instance details

Defined in Data.Semiring.Generic

Methods

plus :: (a, b, c, d, e, f, g) -> (a, b, c, d, e, f, g) -> (a, b, c, d, e, f, g) #

zero :: (a, b, c, d, e, f, g) #

times :: (a, b, c, d, e, f, g) -> (a, b, c, d, e, f, g) -> (a, b, c, d, e, f, g) #

one :: (a, b, c, d, e, f, g) #

fromNatural :: Natural -> (a, b, c, d, e, f, g) #

(+) :: Semiring a => a -> a -> a infixl 6 #

Infix shorthand for plus.

(*) :: Semiring a => a -> a -> a infixl 7 #

Infix shorthand for times.

(^) :: (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.

sum :: (Foldable t, Semiring a) => t a -> a #

The sum function computes the additive sum of the elements in a structure. This function is lazy. For a strict version, see sum'.

product :: (Foldable t, Semiring a) => t a -> a #

The product function computes the product of the elements in a structure. This function is lazy. for a strict version, see product'.

sum' :: (Foldable t, Semiring a) => t a -> a #

The sum' function computes the additive sum of the elements in a structure. This function is strict. For a lazy version, see sum.

product' :: (Foldable t, Semiring a) => t a -> a #

The product' function computes the additive sum of the elements in a structure. This function is strict. For a lazy version, see product.

isZero :: (Eq a, Semiring a) => a -> Bool #

Is the value zero?

isOne :: (Eq a, Semiring a) => a -> Bool #

Is the value one?

Types

newtype Add a #

Monoid under plus. Analogous to Sum, but uses the Semiring constraint rather than Num.

Constructors

Add 

Fields

Instances

Instances details
Foldable Add # 
Instance details

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

toList :: Add a -> [a]

null :: Add a -> Bool

length :: Add a -> Int

elem :: Eq a => a -> Add a -> Bool

maximum :: Ord a => Add a -> a

minimum :: Ord a => Add a -> a

sum :: Num a => Add a -> a

product :: Num a => Add a -> a

Traversable Add # 
Instance details

Defined in Data.Semiring

Methods

traverse :: Applicative f => (a -> f b) -> Add a -> f (Add b)

sequenceA :: Applicative f => Add (f a) -> f (Add a)

mapM :: Monad m => (a -> m b) -> Add a -> m (Add b) #

sequence :: Monad m => Add (m a) -> m (Add a) #

Functor Add # 
Instance details

Defined in Data.Semiring

Methods

fmap :: (a -> b) -> Add a -> Add b #

(<$) :: a -> Add b -> Add a #

Generic1 Add # 
Instance details

Defined in Data.Semiring

Associated Types

type Rep1 Add :: k -> Type

Methods

from1 :: forall (a :: k). Add a -> Rep1 Add a

to1 :: forall (a :: k). Rep1 Add a -> Add a

Storable a => Storable (Add a) # 
Instance details

Defined in Data.Semiring

Methods

sizeOf :: Add a -> Int

alignment :: Add a -> Int

peekElemOff :: Ptr (Add a) -> Int -> IO (Add a)

pokeElemOff :: Ptr (Add a) -> Int -> Add a -> IO ()

peekByteOff :: Ptr b -> Int -> IO (Add a)

pokeByteOff :: Ptr b -> Int -> Add a -> IO ()

peek :: Ptr (Add a) -> IO (Add a)

poke :: Ptr (Add a) -> Add a -> IO ()

Semiring a => Monoid (Add a) # 
Instance details

Defined in Data.Semiring

Methods

mempty :: Add a #

mappend :: Add a -> Add a -> Add a #

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

Semiring a => Semigroup (Add a) # 
Instance details

Defined in Data.Semiring

Methods

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

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

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

Bounded a => Bounded (Add a) # 
Instance details

Defined in Data.Semiring

Methods

minBound :: Add a

maxBound :: Add a

Enum a => Enum (Add a) # 
Instance details

Defined in Data.Semiring

Methods

succ :: Add a -> Add a

pred :: Add a -> Add a

toEnum :: Int -> Add a

fromEnum :: Add a -> Int

enumFrom :: Add a -> [Add a]

enumFromThen :: Add a -> Add a -> [Add a]

enumFromTo :: Add a -> Add a -> [Add a]

enumFromThenTo :: Add a -> Add a -> Add a -> [Add a]

Generic (Add a) # 
Instance details

Defined in Data.Semiring

Associated Types

type Rep (Add a) :: Type -> Type

Methods

from :: Add a -> Rep (Add a) x

to :: Rep (Add a) x -> Add a

Num a => Num (Add a) # 
Instance details

Defined in Data.Semiring

Methods

(+) :: Add a -> Add a -> Add a

(-) :: Add a -> Add a -> Add a

(*) :: Add a -> Add a -> Add a

negate :: Add a -> Add a

abs :: Add a -> Add a

signum :: Add a -> Add a

fromInteger :: Integer -> Add a

Read a => Read (Add a) # 
Instance details

Defined in Data.Semiring

Methods

readsPrec :: Int -> ReadS (Add a) #

readList :: ReadS [Add a] #

readPrec :: ReadPrec (Add a) #

readListPrec :: ReadPrec [Add a] #

Fractional a => Fractional (Add a) # 
Instance details

Defined in Data.Semiring

Methods

(/) :: Add a -> Add a -> Add a

recip :: Add a -> Add a

fromRational :: Rational -> Add a

Real a => Real (Add a) # 
Instance details

Defined in Data.Semiring

Methods

toRational :: Add a -> Rational

RealFrac a => RealFrac (Add a) # 
Instance details

Defined in Data.Semiring

Methods

properFraction :: Integral b => Add a -> (b, Add a)

truncate :: Integral b => Add a -> b

round :: Integral b => Add a -> b

ceiling :: Integral b => Add a -> b

floor :: Integral b => Add a -> b

Show a => Show (Add a) # 
Instance details

Defined in Data.Semiring

Methods

showsPrec :: Int -> Add a -> ShowS

show :: Add a -> String

showList :: [Add a] -> ShowS

Eq a => Eq (Add a) # 
Instance details

Defined in Data.Semiring

Methods

(==) :: Add a -> Add a -> Bool

(/=) :: Add a -> Add a -> Bool

Ord a => Ord (Add a) # 
Instance details

Defined in Data.Semiring

Methods

compare :: Add a -> Add a -> Ordering

(<) :: Add a -> Add a -> Bool

(<=) :: Add a -> Add a -> Bool

(>) :: Add a -> Add a -> Bool

(>=) :: Add a -> Add a -> Bool

max :: Add a -> Add a -> Add a

min :: Add a -> Add a -> Add a

type Rep1 Add # 
Instance details

Defined in Data.Semiring

type Rep1 Add = D1 ('MetaData "Add" "Data.Semiring" "semirings-0.6-9ytJH8Hyv3nHXGSEhbQm5T" 'True) (C1 ('MetaCons "Add" 'PrefixI 'True) (S1 ('MetaSel ('Just "getAdd") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))
type Rep (Add a) # 
Instance details

Defined in Data.Semiring

type Rep (Add a) = D1 ('MetaData "Add" "Data.Semiring" "semirings-0.6-9ytJH8Hyv3nHXGSEhbQm5T" 'True) (C1 ('MetaCons "Add" 'PrefixI 'True) (S1 ('MetaSel ('Just "getAdd") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

newtype Mul a #

Monoid under times. Analogous to Product, but uses the Semiring constraint rather than Num.

Constructors

Mul 

Fields

Instances

Instances details
Foldable Mul # 
Instance details

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

toList :: Mul a -> [a]

null :: Mul a -> Bool

length :: Mul a -> Int

elem :: Eq a => a -> Mul a -> Bool

maximum :: Ord a => Mul a -> a

minimum :: Ord a => Mul a -> a

sum :: Num a => Mul a -> a

product :: Num a => Mul a -> a

Traversable Mul # 
Instance details

Defined in Data.Semiring

Methods

traverse :: Applicative f => (a -> f b) -> Mul a -> f (Mul b)

sequenceA :: Applicative f => Mul (f a) -> f (Mul a)

mapM :: Monad m => (a -> m b) -> Mul a -> m (Mul b) #

sequence :: Monad m => Mul (m a) -> m (Mul a) #

Functor Mul # 
Instance details

Defined in Data.Semiring

Methods

fmap :: (a -> b) -> Mul a -> Mul b #

(<$) :: a -> Mul b -> Mul a #

Generic1 Mul # 
Instance details

Defined in Data.Semiring

Associated Types

type Rep1 Mul :: k -> Type

Methods

from1 :: forall (a :: k). Mul a -> Rep1 Mul a

to1 :: forall (a :: k). Rep1 Mul a -> Mul a

Storable a => Storable (Mul a) # 
Instance details

Defined in Data.Semiring

Methods

sizeOf :: Mul a -> Int

alignment :: Mul a -> Int

peekElemOff :: Ptr (Mul a) -> Int -> IO (Mul a)

pokeElemOff :: Ptr (Mul a) -> Int -> Mul a -> IO ()

peekByteOff :: Ptr b -> Int -> IO (Mul a)

pokeByteOff :: Ptr b -> Int -> Mul a -> IO ()

peek :: Ptr (Mul a) -> IO (Mul a)

poke :: Ptr (Mul a) -> Mul a -> IO ()

Semiring a => Monoid (Mul a) # 
Instance details

Defined in Data.Semiring

Methods

mempty :: Mul a #

mappend :: Mul a -> Mul a -> Mul a #

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

Semiring a => Semigroup (Mul a) # 
Instance details

Defined in Data.Semiring

Methods

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

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

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

Bounded a => Bounded (Mul a) # 
Instance details

Defined in Data.Semiring

Methods

minBound :: Mul a

maxBound :: Mul a

Enum a => Enum (Mul a) # 
Instance details

Defined in Data.Semiring

Methods

succ :: Mul a -> Mul a

pred :: Mul a -> Mul a

toEnum :: Int -> Mul a

fromEnum :: Mul a -> Int

enumFrom :: Mul a -> [Mul a]

enumFromThen :: Mul a -> Mul a -> [Mul a]

enumFromTo :: Mul a -> Mul a -> [Mul a]

enumFromThenTo :: Mul a -> Mul a -> Mul a -> [Mul a]

Generic (Mul a) # 
Instance details

Defined in Data.Semiring

Associated Types

type Rep (Mul a) :: Type -> Type

Methods

from :: Mul a -> Rep (Mul a) x

to :: Rep (Mul a) x -> Mul a

Num a => Num (Mul a) # 
Instance details

Defined in Data.Semiring

Methods

(+) :: Mul a -> Mul a -> Mul a

(-) :: Mul a -> Mul a -> Mul a

(*) :: Mul a -> Mul a -> Mul a

negate :: Mul a -> Mul a

abs :: Mul a -> Mul a

signum :: Mul a -> Mul a

fromInteger :: Integer -> Mul a

Read a => Read (Mul a) # 
Instance details

Defined in Data.Semiring

Methods

readsPrec :: Int -> ReadS (Mul a) #

readList :: ReadS [Mul a] #

readPrec :: ReadPrec (Mul a) #

readListPrec :: ReadPrec [Mul a] #

Fractional a => Fractional (Mul a) # 
Instance details

Defined in Data.Semiring

Methods

(/) :: Mul a -> Mul a -> Mul a

recip :: Mul a -> Mul a

fromRational :: Rational -> Mul a

Real a => Real (Mul a) # 
Instance details

Defined in Data.Semiring

Methods

toRational :: Mul a -> Rational

RealFrac a => RealFrac (Mul a) # 
Instance details

Defined in Data.Semiring

Methods

properFraction :: Integral b => Mul a -> (b, Mul a)

truncate :: Integral b => Mul a -> b

round :: Integral b => Mul a -> b

ceiling :: Integral b => Mul a -> b

floor :: Integral b => Mul a -> b

Show a => Show (Mul a) # 
Instance details

Defined in Data.Semiring

Methods

showsPrec :: Int -> Mul a -> ShowS

show :: Mul a -> String

showList :: [Mul a] -> ShowS

Eq a => Eq (Mul a) # 
Instance details

Defined in Data.Semiring

Methods

(==) :: Mul a -> Mul a -> Bool

(/=) :: Mul a -> Mul a -> Bool

Ord a => Ord (Mul a) # 
Instance details

Defined in Data.Semiring

Methods

compare :: Mul a -> Mul a -> Ordering

(<) :: Mul a -> Mul a -> Bool

(<=) :: Mul a -> Mul a -> Bool

(>) :: Mul a -> Mul a -> Bool

(>=) :: Mul a -> Mul a -> Bool

max :: Mul a -> Mul a -> Mul a

min :: Mul a -> Mul a -> Mul a

type Rep1 Mul # 
Instance details

Defined in Data.Semiring

type Rep1 Mul = D1 ('MetaData "Mul" "Data.Semiring" "semirings-0.6-9ytJH8Hyv3nHXGSEhbQm5T" 'True) (C1 ('MetaCons "Mul" 'PrefixI 'True) (S1 ('MetaSel ('Just "getMul") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))
type Rep (Mul a) # 
Instance details

Defined in Data.Semiring

type Rep (Mul a) = D1 ('MetaData "Mul" "Data.Semiring" "semirings-0.6-9ytJH8Hyv3nHXGSEhbQm5T" 'True) (C1 ('MetaCons "Mul" 'PrefixI 'True) (S1 ('MetaSel ('Just "getMul") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

newtype WrappedNum a #

Provide Semiring and Ring for an arbitrary Num. It is useful with GHC 8.6+'s DerivingVia extension.

Constructors

WrapNum 

Fields

Instances

Instances details
Foldable WrappedNum # 
Instance details

Defined in Data.Semiring

Methods

fold :: Monoid m => WrappedNum m -> m

foldMap :: Monoid m => (a -> m) -> WrappedNum a -> m

foldMap' :: Monoid m => (a -> m) -> WrappedNum a -> m

foldr :: (a -> b -> b) -> b -> WrappedNum a -> b

foldr' :: (a -> b -> b) -> b -> WrappedNum a -> b

foldl :: (b -> a -> b) -> b -> WrappedNum a -> b

foldl' :: (b -> a -> b) -> b -> WrappedNum a -> b

foldr1 :: (a -> a -> a) -> WrappedNum a -> a

foldl1 :: (a -> a -> a) -> WrappedNum a -> a

toList :: WrappedNum a -> [a]

null :: WrappedNum a -> Bool

length :: WrappedNum a -> Int

elem :: Eq a => a -> WrappedNum a -> Bool

maximum :: Ord a => WrappedNum a -> a

minimum :: Ord a => WrappedNum a -> a

sum :: Num a => WrappedNum a -> a

product :: Num a => WrappedNum a -> a

Traversable WrappedNum # 
Instance details

Defined in Data.Semiring

Methods

traverse :: Applicative f => (a -> f b) -> WrappedNum a -> f (WrappedNum b)

sequenceA :: Applicative f => WrappedNum (f a) -> f (WrappedNum a)

mapM :: Monad m => (a -> m b) -> WrappedNum a -> m (WrappedNum b) #

sequence :: Monad m => WrappedNum (m a) -> m (WrappedNum a) #

Functor WrappedNum # 
Instance details

Defined in Data.Semiring

Methods

fmap :: (a -> b) -> WrappedNum a -> WrappedNum b #

(<$) :: a -> WrappedNum b -> WrappedNum a #

Generic1 WrappedNum # 
Instance details

Defined in Data.Semiring

Associated Types

type Rep1 WrappedNum :: k -> Type

Methods

from1 :: forall (a :: k). WrappedNum a -> Rep1 WrappedNum a

to1 :: forall (a :: k). Rep1 WrappedNum a -> WrappedNum a

Storable a => Storable (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Methods

sizeOf :: WrappedNum a -> Int

alignment :: WrappedNum a -> Int

peekElemOff :: Ptr (WrappedNum a) -> Int -> IO (WrappedNum a)

pokeElemOff :: Ptr (WrappedNum a) -> Int -> WrappedNum a -> IO ()

peekByteOff :: Ptr b -> Int -> IO (WrappedNum a)

pokeByteOff :: Ptr b -> Int -> WrappedNum a -> IO ()

peek :: Ptr (WrappedNum a) -> IO (WrappedNum a)

poke :: Ptr (WrappedNum a) -> WrappedNum a -> IO ()

Bits a => Bits (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Methods

(.&.) :: WrappedNum a -> WrappedNum a -> WrappedNum a

(.|.) :: WrappedNum a -> WrappedNum a -> WrappedNum a

xor :: WrappedNum a -> WrappedNum a -> WrappedNum a

complement :: WrappedNum a -> WrappedNum a

shift :: WrappedNum a -> Int -> WrappedNum a

rotate :: WrappedNum a -> Int -> WrappedNum a

zeroBits :: WrappedNum a

bit :: Int -> WrappedNum a

setBit :: WrappedNum a -> Int -> WrappedNum a

clearBit :: WrappedNum a -> Int -> WrappedNum a

complementBit :: WrappedNum a -> Int -> WrappedNum a

testBit :: WrappedNum a -> Int -> Bool

bitSizeMaybe :: WrappedNum a -> Maybe Int

bitSize :: WrappedNum a -> Int

isSigned :: WrappedNum a -> Bool

shiftL :: WrappedNum a -> Int -> WrappedNum a

unsafeShiftL :: WrappedNum a -> Int -> WrappedNum a

shiftR :: WrappedNum a -> Int -> WrappedNum a

unsafeShiftR :: WrappedNum a -> Int -> WrappedNum a

rotateL :: WrappedNum a -> Int -> WrappedNum a

rotateR :: WrappedNum a -> Int -> WrappedNum a

popCount :: WrappedNum a -> Int

Bounded a => Bounded (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Enum a => Enum (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Generic (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Associated Types

type Rep (WrappedNum a) :: Type -> Type

Methods

from :: WrappedNum a -> Rep (WrappedNum a) x

to :: Rep (WrappedNum a) x -> WrappedNum a

Num a => Num (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Read a => Read (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Methods

readsPrec :: Int -> ReadS (WrappedNum a) #

readList :: ReadS [WrappedNum a] #

readPrec :: ReadPrec (WrappedNum a) #

readListPrec :: ReadPrec [WrappedNum a] #

Fractional a => Fractional (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Methods

(/) :: WrappedNum a -> WrappedNum a -> WrappedNum a

recip :: WrappedNum a -> WrappedNum a

fromRational :: Rational -> WrappedNum a

Real a => Real (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Methods

toRational :: WrappedNum a -> Rational

RealFrac a => RealFrac (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Methods

properFraction :: Integral b => WrappedNum a -> (b, WrappedNum a)

truncate :: Integral b => WrappedNum a -> b

round :: Integral b => WrappedNum a -> b

ceiling :: Integral b => WrappedNum a -> b

floor :: Integral b => WrappedNum a -> b

Show a => Show (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Methods

showsPrec :: Int -> WrappedNum a -> ShowS

show :: WrappedNum a -> String

showList :: [WrappedNum a] -> ShowS

Eq a => Eq (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Methods

(==) :: WrappedNum a -> WrappedNum a -> Bool

(/=) :: WrappedNum a -> WrappedNum a -> Bool

Ord a => Ord (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Methods

compare :: WrappedNum a -> WrappedNum a -> Ordering

(<) :: WrappedNum a -> WrappedNum a -> Bool

(<=) :: WrappedNum a -> WrappedNum a -> Bool

(>) :: WrappedNum a -> WrappedNum a -> Bool

(>=) :: WrappedNum a -> WrappedNum a -> Bool

max :: WrappedNum a -> WrappedNum a -> WrappedNum a

min :: WrappedNum a -> WrappedNum a -> WrappedNum a

Num a => Ring (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Methods

negate :: WrappedNum a -> WrappedNum a #

Num a => Semiring (WrappedNum a) # 
Instance details

Defined in Data.Semiring

type Rep1 WrappedNum # 
Instance details

Defined in Data.Semiring

type Rep1 WrappedNum = D1 ('MetaData "WrappedNum" "Data.Semiring" "semirings-0.6-9ytJH8Hyv3nHXGSEhbQm5T" 'True) (C1 ('MetaCons "WrapNum" 'PrefixI 'True) (S1 ('MetaSel ('Just "unwrapNum") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))
type Rep (WrappedNum a) # 
Instance details

Defined in Data.Semiring

type Rep (WrappedNum a) = D1 ('MetaData "WrappedNum" "Data.Semiring" "semirings-0.6-9ytJH8Hyv3nHXGSEhbQm5T" 'True) (C1 ('MetaCons "WrapNum" 'PrefixI 'True) (S1 ('MetaSel ('Just "unwrapNum") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

newtype Mod2 #

Mod2 represents the integers mod 2.

It is useful in the computing of Zhegalkin polynomials.

Constructors

Mod2 

Fields

Instances

Instances details
Bounded Mod2 # 
Instance details

Defined in Data.Semiring

Enum Mod2 # 
Instance details

Defined in Data.Semiring

Methods

succ :: Mod2 -> Mod2

pred :: Mod2 -> Mod2

toEnum :: Int -> Mod2

fromEnum :: Mod2 -> Int

enumFrom :: Mod2 -> [Mod2]

enumFromThen :: Mod2 -> Mod2 -> [Mod2]

enumFromTo :: Mod2 -> Mod2 -> [Mod2]

enumFromThenTo :: Mod2 -> Mod2 -> Mod2 -> [Mod2]

Generic Mod2 # 
Instance details

Defined in Data.Semiring

Associated Types

type Rep Mod2 :: Type -> Type

Methods

from :: Mod2 -> Rep Mod2 x

to :: Rep Mod2 x -> Mod2

Read Mod2 # 
Instance details

Defined in Data.Semiring

Methods

readsPrec :: Int -> ReadS Mod2 #

readList :: ReadS [Mod2] #

readPrec :: ReadPrec Mod2 #

readListPrec :: ReadPrec [Mod2] #

Show Mod2 # 
Instance details

Defined in Data.Semiring

Methods

showsPrec :: Int -> Mod2 -> ShowS

show :: Mod2 -> String

showList :: [Mod2] -> ShowS

Eq Mod2 # 
Instance details

Defined in Data.Semiring

Methods

(==) :: Mod2 -> Mod2 -> Bool

(/=) :: Mod2 -> Mod2 -> Bool

Ord Mod2 # 
Instance details

Defined in Data.Semiring

Methods

compare :: Mod2 -> Mod2 -> Ordering

(<) :: Mod2 -> Mod2 -> Bool

(<=) :: Mod2 -> Mod2 -> Bool

(>) :: Mod2 -> Mod2 -> Bool

(>=) :: Mod2 -> Mod2 -> Bool

max :: Mod2 -> Mod2 -> Mod2

min :: Mod2 -> Mod2 -> Mod2

Euclidean Mod2 # 
Instance details

Defined in Data.Euclidean

Methods

quotRem :: Mod2 -> Mod2 -> (Mod2, Mod2) #

quot :: Mod2 -> Mod2 -> Mod2 #

rem :: Mod2 -> Mod2 -> Mod2 #

degree :: Mod2 -> Natural #

Field Mod2 # 
Instance details

Defined in Data.Euclidean

GcdDomain Mod2 # 
Instance details

Defined in Data.Euclidean

Methods

divide :: Mod2 -> Mod2 -> Maybe Mod2 #

gcd :: Mod2 -> Mod2 -> Mod2 #

lcm :: Mod2 -> Mod2 -> Mod2 #

coprime :: Mod2 -> Mod2 -> Bool #

Ring Mod2 # 
Instance details

Defined in Data.Semiring

Methods

negate :: Mod2 -> Mod2 #

Semiring Mod2 # 
Instance details

Defined in Data.Semiring

Methods

plus :: Mod2 -> Mod2 -> Mod2 #

zero :: Mod2 #

times :: Mod2 -> Mod2 -> Mod2 #

one :: Mod2 #

fromNatural :: Natural -> Mod2 #

Star Mod2 # 
Instance details

Defined in Data.Star

Methods

star :: Mod2 -> Mod2 #

aplus :: Mod2 -> Mod2 #

type Rep Mod2 # 
Instance details

Defined in Data.Semiring

type Rep Mod2 = D1 ('MetaData "Mod2" "Data.Semiring" "semirings-0.6-9ytJH8Hyv3nHXGSEhbQm5T" 'True) (C1 ('MetaCons "Mod2" 'PrefixI 'True) (S1 ('MetaSel ('Just "getMod2") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool)))

newtype IntSetOf a #

Wrapper to mimic Set (Sum Int), Set (Product Int), etc., while having a more efficient underlying representation.

Constructors

IntSetOf 

Fields

Instances

Instances details
Generic1 IntSetOf # 
Instance details

Defined in Data.Semiring

Associated Types

type Rep1 IntSetOf :: k -> Type

Methods

from1 :: forall (a :: k). IntSetOf a -> Rep1 IntSetOf a

to1 :: forall (a :: k). Rep1 IntSetOf a -> IntSetOf a

Monoid (IntSetOf a) # 
Instance details

Defined in Data.Semiring

Methods

mempty :: IntSetOf a #

mappend :: IntSetOf a -> IntSetOf a -> IntSetOf a #

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

Semigroup (IntSetOf a) # 
Instance details

Defined in Data.Semiring

Methods

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

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

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

Generic (IntSetOf a) # 
Instance details

Defined in Data.Semiring

Associated Types

type Rep (IntSetOf a) :: Type -> Type

Methods

from :: IntSetOf a -> Rep (IntSetOf a) x

to :: Rep (IntSetOf a) x -> IntSetOf a

Read (IntSetOf a) # 
Instance details

Defined in Data.Semiring

Methods

readsPrec :: Int -> ReadS (IntSetOf a) #

readList :: ReadS [IntSetOf a] #

readPrec :: ReadPrec (IntSetOf a) #

readListPrec :: ReadPrec [IntSetOf a] #

Show (IntSetOf a) # 
Instance details

Defined in Data.Semiring

Methods

showsPrec :: Int -> IntSetOf a -> ShowS

show :: IntSetOf a -> String

showList :: [IntSetOf a] -> ShowS

Eq (IntSetOf a) # 
Instance details

Defined in Data.Semiring

Methods

(==) :: IntSetOf a -> IntSetOf a -> Bool

(/=) :: IntSetOf a -> IntSetOf a -> Bool

Ord (IntSetOf a) # 
Instance details

Defined in Data.Semiring

Methods

compare :: IntSetOf a -> IntSetOf a -> Ordering

(<) :: IntSetOf a -> IntSetOf a -> Bool

(<=) :: IntSetOf a -> IntSetOf a -> Bool

(>) :: IntSetOf a -> IntSetOf a -> Bool

(>=) :: IntSetOf a -> IntSetOf a -> Bool

max :: IntSetOf a -> IntSetOf a -> IntSetOf a

min :: IntSetOf a -> IntSetOf a -> IntSetOf a

(Coercible Int a, Monoid a) => Semiring (IntSetOf a) # 
Instance details

Defined in Data.Semiring

Methods

plus :: IntSetOf a -> IntSetOf a -> IntSetOf a #

zero :: IntSetOf a #

times :: IntSetOf a -> IntSetOf a -> IntSetOf a #

one :: IntSetOf a #

fromNatural :: Natural -> IntSetOf a #

type Rep1 IntSetOf # 
Instance details

Defined in Data.Semiring

type Rep1 IntSetOf = D1 ('MetaData "IntSetOf" "Data.Semiring" "semirings-0.6-9ytJH8Hyv3nHXGSEhbQm5T" 'True) (C1 ('MetaCons "IntSetOf" 'PrefixI 'True) (S1 ('MetaSel ('Just "getIntSet") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 IntSet)))
type Rep (IntSetOf a) # 
Instance details

Defined in Data.Semiring

type Rep (IntSetOf a) = D1 ('MetaData "IntSetOf" "Data.Semiring" "semirings-0.6-9ytJH8Hyv3nHXGSEhbQm5T" 'True) (C1 ('MetaCons "IntSetOf" 'PrefixI 'True) (S1 ('MetaSel ('Just "getIntSet") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 IntSet)))

newtype IntMapOf k v #

Wrapper to mimic Map (Sum Int) v, Map (Product Int) v, etc., while having a more efficient underlying representation.

Constructors

IntMapOf 

Fields

Instances

Instances details
Generic1 (IntMapOf k :: Type -> Type) # 
Instance details

Defined in Data.Semiring

Associated Types

type Rep1 (IntMapOf k) :: k -> Type

Methods

from1 :: forall (a :: k0). IntMapOf k a -> Rep1 (IntMapOf k) a

to1 :: forall (a :: k0). Rep1 (IntMapOf k) a -> IntMapOf k a

Monoid (IntMapOf k v) # 
Instance details

Defined in Data.Semiring

Methods

mempty :: IntMapOf k v #

mappend :: IntMapOf k v -> IntMapOf k v -> IntMapOf k v #

mconcat :: [IntMapOf k v] -> IntMapOf k v #

Semigroup (IntMapOf k v) # 
Instance details

Defined in Data.Semiring

Methods

(<>) :: IntMapOf k v -> IntMapOf k v -> IntMapOf k v #

sconcat :: NonEmpty (IntMapOf k v) -> IntMapOf k v #

stimes :: Integral b => b -> IntMapOf k v -> IntMapOf k v #

Generic (IntMapOf k v) # 
Instance details

Defined in Data.Semiring

Associated Types

type Rep (IntMapOf k v) :: Type -> Type

Methods

from :: IntMapOf k v -> Rep (IntMapOf k v) x

to :: Rep (IntMapOf k v) x -> IntMapOf k v

Read v => Read (IntMapOf k v) # 
Instance details

Defined in Data.Semiring

Methods

readsPrec :: Int -> ReadS (IntMapOf k v) #

readList :: ReadS [IntMapOf k v] #

readPrec :: ReadPrec (IntMapOf k v) #

readListPrec :: ReadPrec [IntMapOf k v] #

Show v => Show (IntMapOf k v) # 
Instance details

Defined in Data.Semiring

Methods

showsPrec :: Int -> IntMapOf k v -> ShowS

show :: IntMapOf k v -> String

showList :: [IntMapOf k v] -> ShowS

Eq v => Eq (IntMapOf k v) # 
Instance details

Defined in Data.Semiring

Methods

(==) :: IntMapOf k v -> IntMapOf k v -> Bool

(/=) :: IntMapOf k v -> IntMapOf k v -> Bool

Ord v => Ord (IntMapOf k v) # 
Instance details

Defined in Data.Semiring

Methods

compare :: IntMapOf k v -> IntMapOf k v -> Ordering

(<) :: IntMapOf k v -> IntMapOf k v -> Bool

(<=) :: IntMapOf k v -> IntMapOf k v -> Bool

(>) :: IntMapOf k v -> IntMapOf k v -> Bool

(>=) :: IntMapOf k v -> IntMapOf k v -> Bool

max :: IntMapOf k v -> IntMapOf k v -> IntMapOf k v

min :: IntMapOf k v -> IntMapOf k v -> IntMapOf k v

(Coercible Int k, Monoid k, Semiring v) => Semiring (IntMapOf k v) # 
Instance details

Defined in Data.Semiring

Methods

plus :: IntMapOf k v -> IntMapOf k v -> IntMapOf k v #

zero :: IntMapOf k v #

times :: IntMapOf k v -> IntMapOf k v -> IntMapOf k v #

one :: IntMapOf k v #

fromNatural :: Natural -> IntMapOf k v #

type Rep1 (IntMapOf k :: Type -> Type) # 
Instance details

Defined in Data.Semiring

type Rep1 (IntMapOf k :: Type -> Type) = D1 ('MetaData "IntMapOf" "Data.Semiring" "semirings-0.6-9ytJH8Hyv3nHXGSEhbQm5T" 'True) (C1 ('MetaCons "IntMapOf" 'PrefixI 'True) (S1 ('MetaSel ('Just "getIntMap") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 IntMap)))
type Rep (IntMapOf k v) # 
Instance details

Defined in Data.Semiring

type Rep (IntMapOf k v) = D1 ('MetaData "IntMapOf" "Data.Semiring" "semirings-0.6-9ytJH8Hyv3nHXGSEhbQm5T" 'True) (C1 ('MetaCons "IntMapOf" 'PrefixI 'True) (S1 ('MetaSel ('Just "getIntMap") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (IntMap v))))

Ring typeclass

class Semiring a => Ring a where #

The class of semirings with an additive inverse.

negate a + a = zero

Methods

negate :: a -> a #

Instances

Instances details
Ring CChar # 
Instance details

Defined in Data.Semiring

Methods

negate :: CChar -> CChar #

Ring CClock # 
Instance details

Defined in Data.Semiring

Methods

negate :: CClock -> CClock #

Ring CDouble # 
Instance details

Defined in Data.Semiring

Methods

negate :: CDouble -> CDouble #

Ring CFloat # 
Instance details

Defined in Data.Semiring

Methods

negate :: CFloat -> CFloat #

Ring CInt # 
Instance details

Defined in Data.Semiring

Methods

negate :: CInt -> CInt #

Ring CIntMax # 
Instance details

Defined in Data.Semiring

Methods

negate :: CIntMax -> CIntMax #

Ring CIntPtr # 
Instance details

Defined in Data.Semiring

Methods

negate :: CIntPtr -> CIntPtr #

Ring CLLong # 
Instance details

Defined in Data.Semiring

Methods

negate :: CLLong -> CLLong #

Ring CLong # 
Instance details

Defined in Data.Semiring

Methods

negate :: CLong -> CLong #

Ring CPtrdiff # 
Instance details

Defined in Data.Semiring

Methods

negate :: CPtrdiff -> CPtrdiff #

Ring CSChar # 
Instance details

Defined in Data.Semiring

Methods

negate :: CSChar -> CSChar #

Ring CSUSeconds # 
Instance details

Defined in Data.Semiring

Methods

negate :: CSUSeconds -> CSUSeconds #

Ring CShort # 
Instance details

Defined in Data.Semiring

Methods

negate :: CShort -> CShort #

Ring CSigAtomic # 
Instance details

Defined in Data.Semiring

Methods

negate :: CSigAtomic -> CSigAtomic #

Ring CSize # 
Instance details

Defined in Data.Semiring

Methods

negate :: CSize -> CSize #

Ring CTime # 
Instance details

Defined in Data.Semiring

Methods

negate :: CTime -> CTime #

Ring CUChar # 
Instance details

Defined in Data.Semiring

Methods

negate :: CUChar -> CUChar #

Ring CUInt # 
Instance details

Defined in Data.Semiring

Methods

negate :: CUInt -> CUInt #

Ring CUIntMax # 
Instance details

Defined in Data.Semiring

Methods

negate :: CUIntMax -> CUIntMax #

Ring CUIntPtr # 
Instance details

Defined in Data.Semiring

Methods

negate :: CUIntPtr -> CUIntPtr #

Ring CULLong # 
Instance details

Defined in Data.Semiring

Methods

negate :: CULLong -> CULLong #

Ring CULong # 
Instance details

Defined in Data.Semiring

Methods

negate :: CULong -> CULong #

Ring CUSeconds # 
Instance details

Defined in Data.Semiring

Methods

negate :: CUSeconds -> CUSeconds #

Ring CUShort # 
Instance details

Defined in Data.Semiring

Methods

negate :: CUShort -> CUShort #

Ring CWchar # 
Instance details

Defined in Data.Semiring

Methods

negate :: CWchar -> CWchar #

Ring IntPtr # 
Instance details

Defined in Data.Semiring

Methods

negate :: IntPtr -> IntPtr #

Ring WordPtr # 
Instance details

Defined in Data.Semiring

Methods

negate :: WordPtr -> WordPtr #

Ring Int16 # 
Instance details

Defined in Data.Semiring

Methods

negate :: Int16 -> Int16 #

Ring Int32 # 
Instance details

Defined in Data.Semiring

Methods

negate :: Int32 -> Int32 #

Ring Int64 # 
Instance details

Defined in Data.Semiring

Methods

negate :: Int64 -> Int64 #

Ring Int8 # 
Instance details

Defined in Data.Semiring

Methods

negate :: Int8 -> Int8 #

Ring Word16 # 
Instance details

Defined in Data.Semiring

Methods

negate :: Word16 -> Word16 #

Ring Word32 # 
Instance details

Defined in Data.Semiring

Methods

negate :: Word32 -> Word32 #

Ring Word64 # 
Instance details

Defined in Data.Semiring

Methods

negate :: Word64 -> Word64 #

Ring Word8 # 
Instance details

Defined in Data.Semiring

Methods

negate :: Word8 -> Word8 #

Ring CCc # 
Instance details

Defined in Data.Semiring

Methods

negate :: CCc -> CCc #

Ring CDev # 
Instance details

Defined in Data.Semiring

Methods

negate :: CDev -> CDev #

Ring CGid # 
Instance details

Defined in Data.Semiring

Methods

negate :: CGid -> CGid #

Ring CIno # 
Instance details

Defined in Data.Semiring

Methods

negate :: CIno -> CIno #

Ring CMode # 
Instance details

Defined in Data.Semiring

Methods

negate :: CMode -> CMode #

Ring CNlink # 
Instance details

Defined in Data.Semiring

Methods

negate :: CNlink -> CNlink #

Ring COff # 
Instance details

Defined in Data.Semiring

Methods

negate :: COff -> COff #

Ring CPid # 
Instance details

Defined in Data.Semiring

Methods

negate :: CPid -> CPid #

Ring CRLim # 
Instance details

Defined in Data.Semiring

Methods

negate :: CRLim -> CRLim #

Ring CSpeed # 
Instance details

Defined in Data.Semiring

Methods

negate :: CSpeed -> CSpeed #

Ring CSsize # 
Instance details

Defined in Data.Semiring

Methods

negate :: CSsize -> CSsize #

Ring CTcflag # 
Instance details

Defined in Data.Semiring

Methods

negate :: CTcflag -> CTcflag #

Ring CUid # 
Instance details

Defined in Data.Semiring

Methods

negate :: CUid -> CUid #

Ring Fd # 
Instance details

Defined in Data.Semiring

Methods

negate :: Fd -> Fd #

Ring Mod2 # 
Instance details

Defined in Data.Semiring

Methods

negate :: Mod2 -> Mod2 #

Ring Integer # 
Instance details

Defined in Data.Semiring

Methods

negate :: Integer -> Integer #

Ring () # 
Instance details

Defined in Data.Semiring

Methods

negate :: () -> () #

Ring Double # 
Instance details

Defined in Data.Semiring

Methods

negate :: Double -> Double #

Ring Float # 
Instance details

Defined in Data.Semiring

Methods

negate :: Float -> Float #

Ring Int # 
Instance details

Defined in Data.Semiring

Methods

negate :: Int -> Int #

Ring Word # 
Instance details

Defined in Data.Semiring

Methods

negate :: Word -> Word #

Ring a => Ring (Complex a) # 
Instance details

Defined in Data.Semiring

Methods

negate :: Complex a -> Complex a #

Ring a => Ring (Identity a) # 
Instance details

Defined in Data.Semiring

Methods

negate :: Identity a -> Identity a #

Ring a => Ring (Down a) # 
Instance details

Defined in Data.Semiring

Methods

negate :: Down a -> Down a #

Ring a => Ring (Dual a) # 
Instance details

Defined in Data.Semiring

Methods

negate :: Dual a -> Dual a #

Integral a => Ring (Ratio a) # 
Instance details

Defined in Data.Semiring

Methods

negate :: Ratio a -> Ratio a #

Ring a => Ring (IO a) # 
Instance details

Defined in Data.Semiring

Methods

negate :: IO a -> IO a #

Num a => Ring (WrappedFractional a) # 
Instance details

Defined in Data.Euclidean

Num a => Ring (WrappedIntegral a) # 
Instance details

Defined in Data.Euclidean

Num a => Ring (WrappedNum a) # 
Instance details

Defined in Data.Semiring

Methods

negate :: WrappedNum a -> WrappedNum a #

HasResolution a => Ring (Fixed a) # 
Instance details

Defined in Data.Semiring

Methods

negate :: Fixed a -> Fixed a #

Ring a => Ring (Op a b) # 
Instance details

Defined in Data.Semiring

Methods

negate :: Op a b -> Op a b #

(Ring a, Ring b) => Ring (a, b) # 
Instance details

Defined in Data.Semiring.Generic

Methods

negate :: (a, b) -> (a, b) #

Ring b => Ring (a -> b) # 
Instance details

Defined in Data.Semiring

Methods

negate :: (a -> b) -> a -> b #

Ring a => Ring (Const a b) # 
Instance details

Defined in Data.Semiring

Methods

negate :: Const a b -> Const a b #

(Ring a, Applicative f) => Ring (Ap f a) # 
Instance details

Defined in Data.Semiring

Methods

negate :: Ap f a -> Ap f a #

(Ring a, Ring b, Ring c) => Ring (a, b, c) # 
Instance details

Defined in Data.Semiring.Generic

Methods

negate :: (a, b, c) -> (a, b, c) #

(Ring a, Ring b, Ring c, Ring d) => Ring (a, b, c, d) # 
Instance details

Defined in Data.Semiring.Generic

Methods

negate :: (a, b, c, d) -> (a, b, c, d) #

(Ring a, Ring b, Ring c, Ring d, Ring e) => Ring (a, b, c, d, e) # 
Instance details

Defined in Data.Semiring.Generic

Methods

negate :: (a, b, c, d, e) -> (a, b, c, d, e) #

(Ring a, Ring b, Ring c, Ring d, Ring e, Ring f) => Ring (a, b, c, d, e, f) # 
Instance details

Defined in Data.Semiring.Generic

Methods

negate :: (a, b, c, d, e, f) -> (a, b, c, d, e, f) #

(Ring a, Ring b, Ring c, Ring d, Ring e, Ring f, Ring g) => Ring (a, b, c, d, e, f, g) # 
Instance details

Defined in Data.Semiring.Generic

Methods

negate :: (a, b, c, d, e, f, g) -> (a, b, c, d, e, f, g) #

fromInteger :: Ring a => Integer -> a #

Convert from integer to ring.

When {-# LANGUAGE RebindableSyntax #-} is enabled, this function is used for desugaring integer literals. This may be used to facilitate transition from Num to Ring: no need to replace 0 and 1 with one and zero or to cast numeric literals.

fromIntegral :: (Integral a, Ring b) => a -> b #

Convert from integral to ring.

minus :: Ring a => a -> a -> a infixl 6 #

Subtract two Ring values. For any type R with a Num instance, this is the same as (-).

x minus y = x + negate y

(-) :: Ring a => a -> a -> a infixl 6 #

Infix shorthand for minus.