semiring-num-0.7.0.0: Basic semiring class and instances

LicenseMIT
Maintainermail@doisinkidney.com
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

Data.Semiring

Description

 

Synopsis

Documentation

class Semiring a where Source #

A Semiring is like the the combination of two Monoids. The first is called <+>; it has the identity element zero, and it is commutative. The second is called <.>; it has identity element one, and it must distribute over <+>.

Laws

Normal Monoid laws

(a <+> b) <+> c = a <+> (b <+> c)
zero <+> a = a <+> zero = a
(a <.> b) <.> c = a <.> (b <.> c)
one <.> a = a <.> one = a

Commutativity of <+>

a <+> b = b <+> a

Distribution of <.> over <+>

a <.> (b <+> c) = (a <.> b) <+> (a <.> c)
(a <+> b) <.> c = (a <.> c) <+> (b <.> c)

Annihilation

zero <.> a = a <.> zero = zero

An ordered semiring follows the laws: x <= y => x <+> z <= y <+> z x <= y => x <+> z <= y <+> z zero <= z && x <= y => x <.> z <= y <.> z && z <.> x <= z <.> y

Methods

zero :: a Source #

The identity of <+>.

one :: a Source #

The identity of <.>.

(<.>) :: a -> a -> a infixl 7 Source #

An associative binary operation, which distributes over <+>.

(<+>) :: a -> a -> a infixl 6 Source #

An associative, commutative binary operation.

zero :: Num a => a Source #

The identity of <+>.

one :: Num a => a Source #

The identity of <.>.

(<+>) :: Num a => a -> a -> a infixl 6 Source #

An associative, commutative binary operation.

(<.>) :: Num a => a -> a -> a infixl 7 Source #

An associative binary operation, which distributes over <+>.

Instances

Semiring Bool Source # 
Semiring Double Source # 
Semiring Float Source # 
Semiring Int Source # 

Methods

zero :: Int Source #

one :: Int Source #

(<.>) :: Int -> Int -> Int Source #

(<+>) :: Int -> Int -> Int Source #

Semiring Int8 Source # 
Semiring Int16 Source # 
Semiring Int32 Source # 
Semiring Int64 Source # 
Semiring Integer Source # 
Semiring Word Source # 
Semiring Word8 Source # 
Semiring Word16 Source # 
Semiring Word32 Source # 
Semiring Word64 Source # 
Semiring () Source # 

Methods

zero :: () Source #

one :: () Source #

(<.>) :: () -> () -> () Source #

(<+>) :: () -> () -> () Source #

Semiring Natural Source # 
Semiring CDev Source # 
Semiring CIno Source # 
Semiring CMode Source # 
Semiring COff Source # 
Semiring CPid Source # 
Semiring CSsize Source # 
Semiring CGid Source # 
Semiring CNlink Source # 
Semiring CUid Source # 
Semiring CCc Source # 

Methods

zero :: CCc Source #

one :: CCc Source #

(<.>) :: CCc -> CCc -> CCc Source #

(<+>) :: CCc -> CCc -> CCc Source #

Semiring CSpeed Source # 
Semiring CTcflag Source # 
Semiring CRLim Source # 
Semiring Fd Source # 

Methods

zero :: Fd Source #

one :: Fd Source #

(<.>) :: Fd -> Fd -> Fd Source #

(<+>) :: Fd -> Fd -> Fd Source #

Semiring WordPtr Source # 
Semiring IntPtr Source # 
Semiring CChar Source # 
Semiring CSChar Source # 
Semiring CUChar Source # 
Semiring CShort Source # 
Semiring CUShort Source # 
Semiring CInt Source # 
Semiring CUInt Source # 
Semiring CLong Source # 
Semiring CULong Source # 
Semiring CLLong Source # 
Semiring CULLong Source # 
Semiring CFloat Source # 
Semiring CDouble Source # 
Semiring CPtrdiff Source # 
Semiring CSize Source # 
Semiring CWchar Source # 
Semiring CSigAtomic Source # 
Semiring CClock Source # 
Semiring CTime Source # 
Semiring CUSeconds Source # 
Semiring CSUSeconds Source # 
Semiring CIntPtr Source # 
Semiring CUIntPtr Source # 
Semiring CIntMax Source # 
Semiring CUIntMax Source # 
Semiring All Source # 

Methods

zero :: All Source #

one :: All Source #

(<.>) :: All -> All -> All Source #

(<+>) :: All -> All -> All Source #

Semiring Any Source # 

Methods

zero :: Any Source #

one :: Any Source #

(<.>) :: Any -> Any -> Any Source #

(<+>) :: Any -> Any -> Any Source #

Semiring a => Semiring [a] Source #

A polynomial in x can be defined as a list of its coefficients, where the ith element is the coefficient of x^i. This is the semiring for such a list. Adapted from here.

Methods

zero :: [a] Source #

one :: [a] Source #

(<.>) :: [a] -> [a] -> [a] Source #

(<+>) :: [a] -> [a] -> [a] Source #

Integral a => Semiring (Ratio a) Source # 

Methods

zero :: Ratio a Source #

one :: Ratio a Source #

(<.>) :: Ratio a -> Ratio a -> Ratio a Source #

(<+>) :: Ratio a -> Ratio a -> Ratio a Source #

Semiring a => Semiring (Identity a) Source # 
HasResolution a => Semiring (Fixed a) Source # 

Methods

zero :: Fixed a Source #

one :: Fixed a Source #

(<.>) :: Fixed a -> Fixed a -> Fixed a Source #

(<+>) :: Fixed a -> Fixed a -> Fixed a Source #

RealFloat a => Semiring (Complex a) Source # 
Monoid a => Semiring (Endo a) Source #

This is not a true semiring. In particular, it requires the underlying monoid to be commutative, and even then, it is only a near semiring. It is, however, extremely useful. For instance, this type:

forall a. Endo (Endo a)

Is a valid encoding of church numerals, with addition and multiplication being their semiring variants.

Methods

zero :: Endo a Source #

one :: Endo a Source #

(<.>) :: Endo a -> Endo a -> Endo a Source #

(<+>) :: Endo a -> Endo a -> Endo a Source #

Semiring a => Semiring (Sum a) Source # 

Methods

zero :: Sum a Source #

one :: Sum a Source #

(<.>) :: Sum a -> Sum a -> Sum a Source #

(<+>) :: Sum a -> Sum a -> Sum a Source #

Semiring a => Semiring (Product a) Source # 
Semiring a => Semiring (Infinite a) Source #

Not lawful. Only for convenience.

Semiring a => Semiring (PositiveInfinite a) Source #

Not lawful. Only for convenience.

Semiring a => Semiring (NegativeInfinite a) Source #

Not lawful. Only for convenience.

(Semiring a, Ord a, HasNegativeInfinity a) => Semiring (Max a) Source # 

Methods

zero :: Max a Source #

one :: Max a Source #

(<.>) :: Max a -> Max a -> Max a Source #

(<+>) :: Max a -> Max a -> Max a Source #

(Semiring a, Ord a, HasPositiveInfinity a) => Semiring (Min a) Source # 

Methods

zero :: Min a Source #

one :: Min a Source #

(<.>) :: Min a -> Min a -> Min a Source #

(<+>) :: Min a -> Min a -> Min a Source #

Semiring a => Semiring (Mul a) Source # 

Methods

zero :: Mul a Source #

one :: Mul a Source #

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

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

Semiring a => Semiring (Add a) Source # 

Methods

zero :: Add a Source #

one :: Add a Source #

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

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

Semiring (Free a) Source # 

Methods

zero :: Free a Source #

one :: Free a Source #

(<.>) :: Free a -> Free a -> Free a Source #

(<+>) :: Free a -> Free a -> Free a Source #

(Floating a, HasPositiveInfinity a) => Semiring (Log a) Source # 

Methods

zero :: Log a Source #

one :: Log a Source #

(<.>) :: Log a -> Log a -> Log a Source #

(<+>) :: Log a -> Log a -> Log a Source #

(Ord a, Semiring a) => Semiring (Viterbi a) Source # 
(Ord a, Num a) => Semiring (Łukasiewicz a) Source # 
(Integral a, Semiring a) => Semiring (Division a) Source #

Only expects positive numbers

(Bounded a, Ord a) => Semiring (Bottleneck a) Source # 
Semiring b => Semiring (a -> b) Source #

The (->) instance is analogous to the one for Monoid.

Methods

zero :: a -> b Source #

one :: a -> b Source #

(<.>) :: (a -> b) -> (a -> b) -> a -> b Source #

(<+>) :: (a -> b) -> (a -> b) -> a -> b Source #

(Semiring a0, Semiring a1) => Semiring (a0, a1) Source # 

Methods

zero :: (a0, a1) Source #

one :: (a0, a1) Source #

(<.>) :: (a0, a1) -> (a0, a1) -> (a0, a1) Source #

(<+>) :: (a0, a1) -> (a0, a1) -> (a0, a1) Source #

(Semiring a0, Semiring a1, Semiring a2) => Semiring (a0, a1, a2) Source # 

Methods

zero :: (a0, a1, a2) Source #

one :: (a0, a1, a2) Source #

(<.>) :: (a0, a1, a2) -> (a0, a1, a2) -> (a0, a1, a2) Source #

(<+>) :: (a0, a1, a2) -> (a0, a1, a2) -> (a0, a1, a2) Source #

Semiring a => Semiring (Const * a b) Source # 

Methods

zero :: Const * a b Source #

one :: Const * a b Source #

(<.>) :: Const * a b -> Const * a b -> Const * a b Source #

(<+>) :: Const * a b -> Const * a b -> Const * a b Source #

(Semiring a0, Semiring a1, Semiring a2, Semiring a3) => Semiring (a0, a1, a2, a3) Source # 

Methods

zero :: (a0, a1, a2, a3) Source #

one :: (a0, a1, a2, a3) Source #

(<.>) :: (a0, a1, a2, a3) -> (a0, a1, a2, a3) -> (a0, a1, a2, a3) Source #

(<+>) :: (a0, a1, a2, a3) -> (a0, a1, a2, a3) -> (a0, a1, a2, a3) Source #

(Semiring a0, Semiring a1, Semiring a2, Semiring a3, Semiring a4) => Semiring (a0, a1, a2, a3, a4) Source # 

Methods

zero :: (a0, a1, a2, a3, a4) Source #

one :: (a0, a1, a2, a3, a4) Source #

(<.>) :: (a0, a1, a2, a3, a4) -> (a0, a1, a2, a3, a4) -> (a0, a1, a2, a3, a4) Source #

(<+>) :: (a0, a1, a2, a3, a4) -> (a0, a1, a2, a3, a4) -> (a0, a1, a2, a3, a4) Source #

(Semiring a0, Semiring a1, Semiring a2, Semiring a3, Semiring a4, Semiring a5) => Semiring (a0, a1, a2, a3, a4, a5) Source # 

Methods

zero :: (a0, a1, a2, a3, a4, a5) Source #

one :: (a0, a1, a2, a3, a4, a5) Source #

(<.>) :: (a0, a1, a2, a3, a4, a5) -> (a0, a1, a2, a3, a4, a5) -> (a0, a1, a2, a3, a4, a5) Source #

(<+>) :: (a0, a1, a2, a3, a4, a5) -> (a0, a1, a2, a3, a4, a5) -> (a0, a1, a2, a3, a4, a5) Source #

(Semiring a0, Semiring a1, Semiring a2, Semiring a3, Semiring a4, Semiring a5, Semiring a6) => Semiring (a0, a1, a2, a3, a4, a5, a6) Source # 

Methods

zero :: (a0, a1, a2, a3, a4, a5, a6) Source #

one :: (a0, a1, a2, a3, a4, a5, a6) Source #

(<.>) :: (a0, a1, a2, a3, a4, a5, a6) -> (a0, a1, a2, a3, a4, a5, a6) -> (a0, a1, a2, a3, a4, a5, a6) Source #

(<+>) :: (a0, a1, a2, a3, a4, a5, a6) -> (a0, a1, a2, a3, a4, a5, a6) -> (a0, a1, a2, a3, a4, a5, a6) Source #

(Semiring a0, Semiring a1, Semiring a2, Semiring a3, Semiring a4, Semiring a5, Semiring a6, Semiring a7) => Semiring (a0, a1, a2, a3, a4, a5, a6, a7) Source # 

Methods

zero :: (a0, a1, a2, a3, a4, a5, a6, a7) Source #

one :: (a0, a1, a2, a3, a4, a5, a6, a7) Source #

(<.>) :: (a0, a1, a2, a3, a4, a5, a6, a7) -> (a0, a1, a2, a3, a4, a5, a6, a7) -> (a0, a1, a2, a3, a4, a5, a6, a7) Source #

(<+>) :: (a0, a1, a2, a3, a4, a5, a6, a7) -> (a0, a1, a2, a3, a4, a5, a6, a7) -> (a0, a1, a2, a3, a4, a5, a6, a7) Source #

(Semiring a0, Semiring a1, Semiring a2, Semiring a3, Semiring a4, Semiring a5, Semiring a6, Semiring a7, Semiring a8) => Semiring (a0, a1, a2, a3, a4, a5, a6, a7, a8) Source # 

Methods

zero :: (a0, a1, a2, a3, a4, a5, a6, a7, a8) Source #

one :: (a0, a1, a2, a3, a4, a5, a6, a7, a8) Source #

(<.>) :: (a0, a1, a2, a3, a4, a5, a6, a7, a8) -> (a0, a1, a2, a3, a4, a5, a6, a7, a8) -> (a0, a1, a2, a3, a4, a5, a6, a7, a8) Source #

(<+>) :: (a0, a1, a2, a3, a4, a5, a6, a7, a8) -> (a0, a1, a2, a3, a4, a5, a6, a7, a8) -> (a0, a1, a2, a3, a4, a5, a6, a7, a8) Source #

class Semiring a => StarSemiring a where Source #

A Star semiring adds one operation, star to a Semiring, such that it follows the law:

star x = one <+> x <.> star x = one <+> star x <.> x

For the semiring of types, this is equivalent to a list. When looking at the Applicative and Alternative classes as (near-) semirings, this is equivalent to the many operation.

Another operation, plus, can be defined in relation to star:

plus x = x <.> star x

This should be recognizable as a non-empty list on types, or the some operation in Alternative.

Minimal complete definition

star | plus

Methods

star :: a -> a Source #

plus :: a -> a Source #

Instances

StarSemiring Bool Source # 

Methods

star :: Bool -> Bool Source #

plus :: Bool -> Bool Source #

StarSemiring () Source # 

Methods

star :: () -> () Source #

plus :: () -> () Source #

StarSemiring All Source # 

Methods

star :: All -> All Source #

plus :: All -> All Source #

StarSemiring Any Source # 

Methods

star :: Any -> Any Source #

plus :: Any -> Any Source #

(Monoid a, Eq a) => StarSemiring (Endo a) Source # 

Methods

star :: Endo a -> Endo a Source #

plus :: Endo a -> Endo a Source #

(Eq a, Semiring a) => StarSemiring (PositiveInfinite a) Source # 
(Semiring a, Ord a, HasPositiveInfinity a, HasNegativeInfinity a) => StarSemiring (Max a) Source # 

Methods

star :: Max a -> Max a Source #

plus :: Max a -> Max a Source #

(Semiring a, Ord a, HasPositiveInfinity a, HasNegativeInfinity a) => StarSemiring (Min a) Source # 

Methods

star :: Min a -> Min a Source #

plus :: Min a -> Min a Source #

StarSemiring a => StarSemiring (Mul a) Source # 

Methods

star :: Mul a -> Mul a Source #

plus :: Mul a -> Mul a Source #

StarSemiring a => StarSemiring (Add a) Source # 

Methods

star :: Add a -> Add a Source #

plus :: Add a -> Add a Source #

StarSemiring b => StarSemiring (a -> b) Source # 

Methods

star :: (a -> b) -> a -> b Source #

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

(StarSemiring a0, StarSemiring a1) => StarSemiring (a0, a1) Source # 

Methods

star :: (a0, a1) -> (a0, a1) Source #

plus :: (a0, a1) -> (a0, a1) Source #

(StarSemiring a0, StarSemiring a1, StarSemiring a2) => StarSemiring (a0, a1, a2) Source # 

Methods

star :: (a0, a1, a2) -> (a0, a1, a2) Source #

plus :: (a0, a1, a2) -> (a0, a1, a2) Source #

(StarSemiring a0, StarSemiring a1, StarSemiring a2, StarSemiring a3) => StarSemiring (a0, a1, a2, a3) Source # 

Methods

star :: (a0, a1, a2, a3) -> (a0, a1, a2, a3) Source #

plus :: (a0, a1, a2, a3) -> (a0, a1, a2, a3) Source #

(StarSemiring a0, StarSemiring a1, StarSemiring a2, StarSemiring a3, StarSemiring a4) => StarSemiring (a0, a1, a2, a3, a4) Source # 

Methods

star :: (a0, a1, a2, a3, a4) -> (a0, a1, a2, a3, a4) Source #

plus :: (a0, a1, a2, a3, a4) -> (a0, a1, a2, a3, a4) Source #

(StarSemiring a0, StarSemiring a1, StarSemiring a2, StarSemiring a3, StarSemiring a4, StarSemiring a5) => StarSemiring (a0, a1, a2, a3, a4, a5) Source # 

Methods

star :: (a0, a1, a2, a3, a4, a5) -> (a0, a1, a2, a3, a4, a5) Source #

plus :: (a0, a1, a2, a3, a4, a5) -> (a0, a1, a2, a3, a4, a5) Source #

(StarSemiring a0, StarSemiring a1, StarSemiring a2, StarSemiring a3, StarSemiring a4, StarSemiring a5, StarSemiring a6) => StarSemiring (a0, a1, a2, a3, a4, a5, a6) Source # 

Methods

star :: (a0, a1, a2, a3, a4, a5, a6) -> (a0, a1, a2, a3, a4, a5, a6) Source #

plus :: (a0, a1, a2, a3, a4, a5, a6) -> (a0, a1, a2, a3, a4, a5, a6) Source #

(StarSemiring a0, StarSemiring a1, StarSemiring a2, StarSemiring a3, StarSemiring a4, StarSemiring a5, StarSemiring a6, StarSemiring a7) => StarSemiring (a0, a1, a2, a3, a4, a5, a6, a7) Source # 

Methods

star :: (a0, a1, a2, a3, a4, a5, a6, a7) -> (a0, a1, a2, a3, a4, a5, a6, a7) Source #

plus :: (a0, a1, a2, a3, a4, a5, a6, a7) -> (a0, a1, a2, a3, a4, a5, a6, a7) Source #

(StarSemiring a0, StarSemiring a1, StarSemiring a2, StarSemiring a3, StarSemiring a4, StarSemiring a5, StarSemiring a6, StarSemiring a7, StarSemiring a8) => StarSemiring (a0, a1, a2, a3, a4, a5, a6, a7, a8) Source # 

Methods

star :: (a0, a1, a2, a3, a4, a5, a6, a7, a8) -> (a0, a1, a2, a3, a4, a5, a6, a7, a8) Source #

plus :: (a0, a1, a2, a3, a4, a5, a6, a7, a8) -> (a0, a1, a2, a3, a4, a5, a6, a7, a8) Source #

data PositiveInfinite a Source #

Constructors

PosFinite !a 
PositiveInfinity 

Instances

Functor PositiveInfinite Source # 

Methods

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

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

Applicative PositiveInfinite Source # 
Foldable PositiveInfinite Source # 

Methods

fold :: Monoid m => PositiveInfinite m -> m #

foldMap :: Monoid m => (a -> m) -> PositiveInfinite a -> m #

foldr :: (a -> b -> b) -> b -> PositiveInfinite a -> b #

foldr' :: (a -> b -> b) -> b -> PositiveInfinite a -> b #

foldl :: (b -> a -> b) -> b -> PositiveInfinite a -> b #

foldl' :: (b -> a -> b) -> b -> PositiveInfinite a -> b #

foldr1 :: (a -> a -> a) -> PositiveInfinite a -> a #

foldl1 :: (a -> a -> a) -> PositiveInfinite a -> a #

toList :: PositiveInfinite a -> [a] #

null :: PositiveInfinite a -> Bool #

length :: PositiveInfinite a -> Int #

elem :: Eq a => a -> PositiveInfinite a -> Bool #

maximum :: Ord a => PositiveInfinite a -> a #

minimum :: Ord a => PositiveInfinite a -> a #

sum :: Num a => PositiveInfinite a -> a #

product :: Num a => PositiveInfinite a -> a #

Traversable PositiveInfinite Source # 

Methods

traverse :: Applicative f => (a -> f b) -> PositiveInfinite a -> f (PositiveInfinite b) #

sequenceA :: Applicative f => PositiveInfinite (f a) -> f (PositiveInfinite a) #

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

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

Generic1 PositiveInfinite Source # 

Associated Types

type Rep1 (PositiveInfinite :: * -> *) :: * -> * #

Bounded a => Bounded (PositiveInfinite a) Source # 
(Enum a, Bounded a, Eq a) => Enum (PositiveInfinite a) Source # 
Eq a => Eq (PositiveInfinite a) Source # 
Num a => Num (PositiveInfinite a) Source # 
Ord a => Ord (PositiveInfinite a) Source # 
Read a => Read (PositiveInfinite a) Source # 
Show a => Show (PositiveInfinite a) Source # 
Generic (PositiveInfinite a) Source # 

Associated Types

type Rep (PositiveInfinite a) :: * -> * #

Monoid a => Monoid (PositiveInfinite a) Source # 
Storable a => Storable (PositiveInfinite a) Source # 
HasPositiveInfinity (PositiveInfinite a) Source # 
(Eq a, Semiring a) => StarSemiring (PositiveInfinite a) Source # 
Semiring a => Semiring (PositiveInfinite a) Source #

Not lawful. Only for convenience.

type Rep1 PositiveInfinite Source # 
type Rep1 PositiveInfinite = D1 (MetaData "PositiveInfinite" "Data.Semiring.Infinite" "semiring-num-0.7.0.0-LZTdLH4bZPrFoYJgqNzb7N" False) ((:+:) (C1 (MetaCons "PosFinite" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) Par1)) (C1 (MetaCons "PositiveInfinity" PrefixI False) U1))
type Rep (PositiveInfinite a) Source # 
type Rep (PositiveInfinite a) = D1 (MetaData "PositiveInfinite" "Data.Semiring.Infinite" "semiring-num-0.7.0.0-LZTdLH4bZPrFoYJgqNzb7N" False) ((:+:) (C1 (MetaCons "PosFinite" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 a))) (C1 (MetaCons "PositiveInfinity" PrefixI False) U1))

data NegativeInfinite a Source #

Constructors

NegativeInfinity 
NegFinite !a 

Instances

Functor NegativeInfinite Source # 

Methods

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

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

Applicative NegativeInfinite Source # 
Foldable NegativeInfinite Source # 

Methods

fold :: Monoid m => NegativeInfinite m -> m #

foldMap :: Monoid m => (a -> m) -> NegativeInfinite a -> m #

foldr :: (a -> b -> b) -> b -> NegativeInfinite a -> b #

foldr' :: (a -> b -> b) -> b -> NegativeInfinite a -> b #

foldl :: (b -> a -> b) -> b -> NegativeInfinite a -> b #

foldl' :: (b -> a -> b) -> b -> NegativeInfinite a -> b #

foldr1 :: (a -> a -> a) -> NegativeInfinite a -> a #

foldl1 :: (a -> a -> a) -> NegativeInfinite a -> a #

toList :: NegativeInfinite a -> [a] #

null :: NegativeInfinite a -> Bool #

length :: NegativeInfinite a -> Int #

elem :: Eq a => a -> NegativeInfinite a -> Bool #

maximum :: Ord a => NegativeInfinite a -> a #

minimum :: Ord a => NegativeInfinite a -> a #

sum :: Num a => NegativeInfinite a -> a #

product :: Num a => NegativeInfinite a -> a #

Traversable NegativeInfinite Source # 

Methods

traverse :: Applicative f => (a -> f b) -> NegativeInfinite a -> f (NegativeInfinite b) #

sequenceA :: Applicative f => NegativeInfinite (f a) -> f (NegativeInfinite a) #

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

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

Generic1 NegativeInfinite Source # 

Associated Types

type Rep1 (NegativeInfinite :: * -> *) :: * -> * #

Bounded a => Bounded (NegativeInfinite a) Source # 
(Enum a, Bounded a, Eq a) => Enum (NegativeInfinite a) Source # 
Eq a => Eq (NegativeInfinite a) Source # 
Num a => Num (NegativeInfinite a) Source # 
Ord a => Ord (NegativeInfinite a) Source # 
Read a => Read (NegativeInfinite a) Source # 
Show a => Show (NegativeInfinite a) Source # 
Generic (NegativeInfinite a) Source # 

Associated Types

type Rep (NegativeInfinite a) :: * -> * #

Monoid a => Monoid (NegativeInfinite a) Source # 
Storable a => Storable (NegativeInfinite a) Source # 
HasNegativeInfinity (NegativeInfinite a) Source # 
Semiring a => Semiring (NegativeInfinite a) Source #

Not lawful. Only for convenience.

type Rep1 NegativeInfinite Source # 
type Rep1 NegativeInfinite = D1 (MetaData "NegativeInfinite" "Data.Semiring.Infinite" "semiring-num-0.7.0.0-LZTdLH4bZPrFoYJgqNzb7N" False) ((:+:) (C1 (MetaCons "NegativeInfinity" PrefixI False) U1) (C1 (MetaCons "NegFinite" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) Par1)))
type Rep (NegativeInfinite a) Source # 
type Rep (NegativeInfinite a) = D1 (MetaData "NegativeInfinite" "Data.Semiring.Infinite" "semiring-num-0.7.0.0-LZTdLH4bZPrFoYJgqNzb7N" False) ((:+:) (C1 (MetaCons "NegativeInfinity" PrefixI False) U1) (C1 (MetaCons "NegFinite" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 a))))

data Infinite a Source #

Constructors

Negative 
Finite !a 
Positive 

Instances

Functor Infinite Source # 

Methods

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

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

Applicative Infinite Source # 

Methods

pure :: a -> Infinite a #

(<*>) :: Infinite (a -> b) -> Infinite a -> Infinite b #

(*>) :: Infinite a -> Infinite b -> Infinite b #

(<*) :: Infinite a -> Infinite b -> Infinite a #

Foldable Infinite Source # 

Methods

fold :: Monoid m => Infinite m -> m #

foldMap :: Monoid m => (a -> m) -> Infinite a -> m #

foldr :: (a -> b -> b) -> b -> Infinite a -> b #

foldr' :: (a -> b -> b) -> b -> Infinite a -> b #

foldl :: (b -> a -> b) -> b -> Infinite a -> b #

foldl' :: (b -> a -> b) -> b -> Infinite a -> b #

foldr1 :: (a -> a -> a) -> Infinite a -> a #

foldl1 :: (a -> a -> a) -> Infinite a -> a #

toList :: Infinite a -> [a] #

null :: Infinite a -> Bool #

length :: Infinite a -> Int #

elem :: Eq a => a -> Infinite a -> Bool #

maximum :: Ord a => Infinite a -> a #

minimum :: Ord a => Infinite a -> a #

sum :: Num a => Infinite a -> a #

product :: Num a => Infinite a -> a #

Traversable Infinite Source # 

Methods

traverse :: Applicative f => (a -> f b) -> Infinite a -> f (Infinite b) #

sequenceA :: Applicative f => Infinite (f a) -> f (Infinite a) #

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

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

Generic1 Infinite Source # 

Associated Types

type Rep1 (Infinite :: * -> *) :: * -> * #

Methods

from1 :: Infinite a -> Rep1 Infinite a #

to1 :: Rep1 Infinite a -> Infinite a #

Bounded (Infinite a) Source # 
(Enum a, Bounded a, Eq a) => Enum (Infinite a) Source # 
Eq a => Eq (Infinite a) Source # 

Methods

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

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

Num a => Num (Infinite a) Source # 
Ord a => Ord (Infinite a) Source # 

Methods

compare :: Infinite a -> Infinite a -> Ordering #

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

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

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

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

max :: Infinite a -> Infinite a -> Infinite a #

min :: Infinite a -> Infinite a -> Infinite a #

Read a => Read (Infinite a) Source # 
Show a => Show (Infinite a) Source # 

Methods

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

show :: Infinite a -> String #

showList :: [Infinite a] -> ShowS #

Generic (Infinite a) Source # 

Associated Types

type Rep (Infinite a) :: * -> * #

Methods

from :: Infinite a -> Rep (Infinite a) x #

to :: Rep (Infinite a) x -> Infinite a #

Monoid a => Monoid (Infinite a) Source # 

Methods

mempty :: Infinite a #

mappend :: Infinite a -> Infinite a -> Infinite a #

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

Storable a => Storable (Infinite a) Source # 

Methods

sizeOf :: Infinite a -> Int #

alignment :: Infinite a -> Int #

peekElemOff :: Ptr (Infinite a) -> Int -> IO (Infinite a) #

pokeElemOff :: Ptr (Infinite a) -> Int -> Infinite a -> IO () #

peekByteOff :: Ptr b -> Int -> IO (Infinite a) #

pokeByteOff :: Ptr b -> Int -> Infinite a -> IO () #

peek :: Ptr (Infinite a) -> IO (Infinite a) #

poke :: Ptr (Infinite a) -> Infinite a -> IO () #

HasNegativeInfinity (Infinite a) Source # 
HasPositiveInfinity (Infinite a) Source # 
Semiring a => Semiring (Infinite a) Source #

Not lawful. Only for convenience.

type Rep1 Infinite Source # 
type Rep1 Infinite = D1 (MetaData "Infinite" "Data.Semiring.Infinite" "semiring-num-0.7.0.0-LZTdLH4bZPrFoYJgqNzb7N" False) ((:+:) (C1 (MetaCons "Negative" PrefixI False) U1) ((:+:) (C1 (MetaCons "Finite" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) Par1)) (C1 (MetaCons "Positive" PrefixI False) U1)))
type Rep (Infinite a) Source # 
type Rep (Infinite a) = D1 (MetaData "Infinite" "Data.Semiring.Infinite" "semiring-num-0.7.0.0-LZTdLH4bZPrFoYJgqNzb7N" False) ((:+:) (C1 (MetaCons "Negative" PrefixI False) U1) ((:+:) (C1 (MetaCons "Finite" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 a))) (C1 (MetaCons "Positive" PrefixI False) U1)))

newtype Add a Source #

Monoid under <+>. Analogous to Sum, but uses the Semiring constraint, rather than Num.

Constructors

Add 

Fields

Instances

Functor Add Source # 

Methods

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

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

Foldable Add Source # 

Methods

fold :: Monoid m => Add m -> 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 Source # 

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) #

Generic1 Add Source # 

Associated Types

type Rep1 (Add :: * -> *) :: * -> * #

Methods

from1 :: Add a -> Rep1 Add a #

to1 :: Rep1 Add a -> Add a #

Bounded a => Bounded (Add a) Source # 

Methods

minBound :: Add a #

maxBound :: Add a #

Enum a => Enum (Add a) Source # 

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] #

Eq a => Eq (Add a) Source # 

Methods

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

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

Fractional a => Fractional (Add a) Source # 

Methods

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

recip :: Add a -> Add a #

fromRational :: Rational -> Add a #

Num a => Num (Add a) Source # 

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 #

Ord a => Ord (Add a) Source # 

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 #

Read a => Read (Add a) Source # 
Real a => Real (Add a) Source # 

Methods

toRational :: Add a -> Rational #

RealFrac a => RealFrac (Add a) Source # 

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) Source # 

Methods

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

show :: Add a -> String #

showList :: [Add a] -> ShowS #

Generic (Add a) Source # 

Associated Types

type Rep (Add a) :: * -> * #

Methods

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

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

Semiring a => Semigroup (Add a) Source # 

Methods

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

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

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

Semiring a => Monoid (Add a) Source # 

Methods

mempty :: Add a #

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

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

Storable a => Storable (Add a) Source # 

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 () #

StarSemiring a => StarSemiring (Add a) Source # 

Methods

star :: Add a -> Add a Source #

plus :: Add a -> Add a Source #

Semiring a => Semiring (Add a) Source # 

Methods

zero :: Add a Source #

one :: Add a Source #

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

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

type Rep1 Add Source # 
type Rep1 Add = D1 (MetaData "Add" "Data.Semiring" "semiring-num-0.7.0.0-LZTdLH4bZPrFoYJgqNzb7N" True) (C1 (MetaCons "Add" PrefixI True) (S1 (MetaSel (Just Symbol "getAdd") NoSourceUnpackedness NoSourceStrictness DecidedLazy) Par1))
type Rep (Add a) Source # 
type Rep (Add a) = D1 (MetaData "Add" "Data.Semiring" "semiring-num-0.7.0.0-LZTdLH4bZPrFoYJgqNzb7N" True) (C1 (MetaCons "Add" PrefixI True) (S1 (MetaSel (Just Symbol "getAdd") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 a)))

newtype Mul a Source #

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

Constructors

Mul 

Fields

Instances

Functor Mul Source # 

Methods

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

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

Foldable Mul Source # 

Methods

fold :: Monoid m => Mul m -> 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 Source # 

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) #

Generic1 Mul Source # 

Associated Types

type Rep1 (Mul :: * -> *) :: * -> * #

Methods

from1 :: Mul a -> Rep1 Mul a #

to1 :: Rep1 Mul a -> Mul a #

Bounded a => Bounded (Mul a) Source # 

Methods

minBound :: Mul a #

maxBound :: Mul a #

Enum a => Enum (Mul a) Source # 

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] #

Eq a => Eq (Mul a) Source # 

Methods

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

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

Fractional a => Fractional (Mul a) Source # 

Methods

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

recip :: Mul a -> Mul a #

fromRational :: Rational -> Mul a #

Num a => Num (Mul a) Source # 

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 #

Ord a => Ord (Mul a) Source # 

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 #

Read a => Read (Mul a) Source # 
Real a => Real (Mul a) Source # 

Methods

toRational :: Mul a -> Rational #

RealFrac a => RealFrac (Mul a) Source # 

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) Source # 

Methods

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

show :: Mul a -> String #

showList :: [Mul a] -> ShowS #

Generic (Mul a) Source # 

Associated Types

type Rep (Mul a) :: * -> * #

Methods

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

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

Semiring a => Semigroup (Mul a) Source # 

Methods

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

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

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

Semiring a => Monoid (Mul a) Source # 

Methods

mempty :: Mul a #

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

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

Storable a => Storable (Mul a) Source # 

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 () #

StarSemiring a => StarSemiring (Mul a) Source # 

Methods

star :: Mul a -> Mul a Source #

plus :: Mul a -> Mul a Source #

Semiring a => Semiring (Mul a) Source # 

Methods

zero :: Mul a Source #

one :: Mul a Source #

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

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

type Rep1 Mul Source # 
type Rep1 Mul = D1 (MetaData "Mul" "Data.Semiring" "semiring-num-0.7.0.0-LZTdLH4bZPrFoYJgqNzb7N" True) (C1 (MetaCons "Mul" PrefixI True) (S1 (MetaSel (Just Symbol "getMul") NoSourceUnpackedness NoSourceStrictness DecidedLazy) Par1))
type Rep (Mul a) Source # 
type Rep (Mul a) = D1 (MetaData "Mul" "Data.Semiring" "semiring-num-0.7.0.0-LZTdLH4bZPrFoYJgqNzb7N" True) (C1 (MetaCons "Mul" PrefixI True) (S1 (MetaSel (Just Symbol "getMul") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 a)))

add :: (Foldable f, Semiring a) => f a -> a Source #

Takes the sum of the elements of a Foldable. Analogous to sum on numbers, or or on Bools.

>>> add [1..5]
15
>>> add [False, False]
False
>>> add [False, True]
True
>>> add [True, undefined]
True

mul :: (Foldable f, Semiring a) => f a -> a Source #

Takes the product of the elements of a Foldable. Analogous to product on numbers, or and on Bools.

>>> mul [1..5]
120
>>> mul [True, True]
True
>>> mul [True, False]
False
>>> mul [False, undefined]
False

newtype Max a Source #

The "Arctic" or max-plus semiring. It is a semiring where:

<+>  = max
zero = -∞ -- represented by Nothing
<.>  = <+>
one  = zero

Note that we can't use Max from Semigroup because annihilation needs to hold:

-∞ <+> x = x <+> -∞ = -∞

Taking -∞ to be minBound would break the above law. Using Nothing to represent it follows the law.

Constructors

Max 

Fields

Instances

Functor Max Source # 

Methods

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

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

Foldable Max Source # 

Methods

fold :: Monoid m => Max m -> m #

foldMap :: Monoid m => (a -> m) -> Max a -> m #

foldr :: (a -> b -> b) -> b -> Max a -> b #

foldr' :: (a -> b -> b) -> b -> Max a -> b #

foldl :: (b -> a -> b) -> b -> Max a -> b #

foldl' :: (b -> a -> b) -> b -> Max a -> b #

foldr1 :: (a -> a -> a) -> Max a -> a #

foldl1 :: (a -> a -> a) -> Max a -> a #

toList :: Max a -> [a] #

null :: Max a -> Bool #

length :: Max a -> Int #

elem :: Eq a => a -> Max a -> Bool #

maximum :: Ord a => Max a -> a #

minimum :: Ord a => Max a -> a #

sum :: Num a => Max a -> a #

product :: Num a => Max a -> a #

Traversable Max Source # 

Methods

traverse :: Applicative f => (a -> f b) -> Max a -> f (Max b) #

sequenceA :: Applicative f => Max (f a) -> f (Max a) #

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

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

Generic1 Max Source # 

Associated Types

type Rep1 (Max :: * -> *) :: * -> * #

Methods

from1 :: Max a -> Rep1 Max a #

to1 :: Rep1 Max a -> Max a #

Bounded a => Bounded (Max a) Source # 

Methods

minBound :: Max a #

maxBound :: Max a #

Enum a => Enum (Max a) Source # 

Methods

succ :: Max a -> Max a #

pred :: Max a -> Max a #

toEnum :: Int -> Max a #

fromEnum :: Max a -> Int #

enumFrom :: Max a -> [Max a] #

enumFromThen :: Max a -> Max a -> [Max a] #

enumFromTo :: Max a -> Max a -> [Max a] #

enumFromThenTo :: Max a -> Max a -> Max a -> [Max a] #

Eq a => Eq (Max a) Source # 

Methods

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

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

Fractional a => Fractional (Max a) Source # 

Methods

(/) :: Max a -> Max a -> Max a #

recip :: Max a -> Max a #

fromRational :: Rational -> Max a #

Num a => Num (Max a) Source # 

Methods

(+) :: Max a -> Max a -> Max a #

(-) :: Max a -> Max a -> Max a #

(*) :: Max a -> Max a -> Max a #

negate :: Max a -> Max a #

abs :: Max a -> Max a #

signum :: Max a -> Max a #

fromInteger :: Integer -> Max a #

Ord a => Ord (Max a) Source # 

Methods

compare :: Max a -> Max a -> Ordering #

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

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

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

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

max :: Max a -> Max a -> Max a #

min :: Max a -> Max a -> Max a #

Read a => Read (Max a) Source # 
Real a => Real (Max a) Source # 

Methods

toRational :: Max a -> Rational #

RealFrac a => RealFrac (Max a) Source # 

Methods

properFraction :: Integral b => Max a -> (b, Max a) #

truncate :: Integral b => Max a -> b #

round :: Integral b => Max a -> b #

ceiling :: Integral b => Max a -> b #

floor :: Integral b => Max a -> b #

Show a => Show (Max a) Source # 

Methods

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

show :: Max a -> String #

showList :: [Max a] -> ShowS #

Generic (Max a) Source # 

Associated Types

type Rep (Max a) :: * -> * #

Methods

from :: Max a -> Rep (Max a) x #

to :: Rep (Max a) x -> Max a #

Ord a => Semigroup (Max a) Source # 

Methods

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

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

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

(Ord a, HasNegativeInfinity a) => Monoid (Max a) Source #
>>> (getMax . foldMap Max) [1..10]
10.0

Methods

mempty :: Max a #

mappend :: Max a -> Max a -> Max a #

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

Storable a => Storable (Max a) Source # 

Methods

sizeOf :: Max a -> Int #

alignment :: Max a -> Int #

peekElemOff :: Ptr (Max a) -> Int -> IO (Max a) #

pokeElemOff :: Ptr (Max a) -> Int -> Max a -> IO () #

peekByteOff :: Ptr b -> Int -> IO (Max a) #

pokeByteOff :: Ptr b -> Int -> Max a -> IO () #

peek :: Ptr (Max a) -> IO (Max a) #

poke :: Ptr (Max a) -> Max a -> IO () #

(Semiring a, Ord a, HasPositiveInfinity a, HasNegativeInfinity a) => StarSemiring (Max a) Source # 

Methods

star :: Max a -> Max a Source #

plus :: Max a -> Max a Source #

(Semiring a, Ord a, HasNegativeInfinity a) => Semiring (Max a) Source # 

Methods

zero :: Max a Source #

one :: Max a Source #

(<.>) :: Max a -> Max a -> Max a Source #

(<+>) :: Max a -> Max a -> Max a Source #

type Rep1 Max Source # 
type Rep1 Max = D1 (MetaData "Max" "Data.Semiring" "semiring-num-0.7.0.0-LZTdLH4bZPrFoYJgqNzb7N" True) (C1 (MetaCons "Max" PrefixI True) (S1 (MetaSel (Just Symbol "getMax") NoSourceUnpackedness NoSourceStrictness DecidedLazy) Par1))
type Rep (Max a) Source # 
type Rep (Max a) = D1 (MetaData "Max" "Data.Semiring" "semiring-num-0.7.0.0-LZTdLH4bZPrFoYJgqNzb7N" True) (C1 (MetaCons "Max" PrefixI True) (S1 (MetaSel (Just Symbol "getMax") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 a)))

newtype Min a Source #

The "Tropical" or min-plus semiring. It is a semiring where:

<+>  = min
zero = ∞ -- represented by Nothing
<.>  = <+>
one  = zero

Note that we can't use Min from Semigroup because annihilation needs to hold:

<+> x = x <+> ∞ = ∞

Taking ∞ to be maxBound would break the above law. Using Nothing to represent it follows the law.

Constructors

Min 

Fields

Instances

Functor Min Source # 

Methods

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

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

Foldable Min Source # 

Methods

fold :: Monoid m => Min m -> m #

foldMap :: Monoid m => (a -> m) -> Min a -> m #

foldr :: (a -> b -> b) -> b -> Min a -> b #

foldr' :: (a -> b -> b) -> b -> Min a -> b #

foldl :: (b -> a -> b) -> b -> Min a -> b #

foldl' :: (b -> a -> b) -> b -> Min a -> b #

foldr1 :: (a -> a -> a) -> Min a -> a #

foldl1 :: (a -> a -> a) -> Min a -> a #

toList :: Min a -> [a] #

null :: Min a -> Bool #

length :: Min a -> Int #

elem :: Eq a => a -> Min a -> Bool #

maximum :: Ord a => Min a -> a #

minimum :: Ord a => Min a -> a #

sum :: Num a => Min a -> a #

product :: Num a => Min a -> a #

Traversable Min Source # 

Methods

traverse :: Applicative f => (a -> f b) -> Min a -> f (Min b) #

sequenceA :: Applicative f => Min (f a) -> f (Min a) #

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

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

Generic1 Min Source # 

Associated Types

type Rep1 (Min :: * -> *) :: * -> * #

Methods

from1 :: Min a -> Rep1 Min a #

to1 :: Rep1 Min a -> Min a #

Bounded a => Bounded (Min a) Source # 

Methods

minBound :: Min a #

maxBound :: Min a #

Enum a => Enum (Min a) Source # 

Methods

succ :: Min a -> Min a #

pred :: Min a -> Min a #

toEnum :: Int -> Min a #

fromEnum :: Min a -> Int #

enumFrom :: Min a -> [Min a] #

enumFromThen :: Min a -> Min a -> [Min a] #

enumFromTo :: Min a -> Min a -> [Min a] #

enumFromThenTo :: Min a -> Min a -> Min a -> [Min a] #

Eq a => Eq (Min a) Source # 

Methods

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

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

Fractional a => Fractional (Min a) Source # 

Methods

(/) :: Min a -> Min a -> Min a #

recip :: Min a -> Min a #

fromRational :: Rational -> Min a #

Num a => Num (Min a) Source # 

Methods

(+) :: Min a -> Min a -> Min a #

(-) :: Min a -> Min a -> Min a #

(*) :: Min a -> Min a -> Min a #

negate :: Min a -> Min a #

abs :: Min a -> Min a #

signum :: Min a -> Min a #

fromInteger :: Integer -> Min a #

Ord a => Ord (Min a) Source # 

Methods

compare :: Min a -> Min a -> Ordering #

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

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

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

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

max :: Min a -> Min a -> Min a #

min :: Min a -> Min a -> Min a #

Read a => Read (Min a) Source # 
Real a => Real (Min a) Source # 

Methods

toRational :: Min a -> Rational #

RealFrac a => RealFrac (Min a) Source # 

Methods

properFraction :: Integral b => Min a -> (b, Min a) #

truncate :: Integral b => Min a -> b #

round :: Integral b => Min a -> b #

ceiling :: Integral b => Min a -> b #

floor :: Integral b => Min a -> b #

Show a => Show (Min a) Source # 

Methods

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

show :: Min a -> String #

showList :: [Min a] -> ShowS #

Generic (Min a) Source # 

Associated Types

type Rep (Min a) :: * -> * #

Methods

from :: Min a -> Rep (Min a) x #

to :: Rep (Min a) x -> Min a #

Ord a => Semigroup (Min a) Source # 

Methods

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

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

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

(Ord a, HasPositiveInfinity a) => Monoid (Min a) Source #
>>> (getMin . foldMap Min) [1..10]
1.0

Methods

mempty :: Min a #

mappend :: Min a -> Min a -> Min a #

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

Storable a => Storable (Min a) Source # 

Methods

sizeOf :: Min a -> Int #

alignment :: Min a -> Int #

peekElemOff :: Ptr (Min a) -> Int -> IO (Min a) #

pokeElemOff :: Ptr (Min a) -> Int -> Min a -> IO () #

peekByteOff :: Ptr b -> Int -> IO (Min a) #

pokeByteOff :: Ptr b -> Int -> Min a -> IO () #

peek :: Ptr (Min a) -> IO (Min a) #

poke :: Ptr (Min a) -> Min a -> IO () #

(Semiring a, Ord a, HasPositiveInfinity a, HasNegativeInfinity a) => StarSemiring (Min a) Source # 

Methods

star :: Min a -> Min a Source #

plus :: Min a -> Min a Source #

(Semiring a, Ord a, HasPositiveInfinity a) => Semiring (Min a) Source # 

Methods

zero :: Min a Source #

one :: Min a Source #

(<.>) :: Min a -> Min a -> Min a Source #

(<+>) :: Min a -> Min a -> Min a Source #

type Rep1 Min Source # 
type Rep1 Min = D1 (MetaData "Min" "Data.Semiring" "semiring-num-0.7.0.0-LZTdLH4bZPrFoYJgqNzb7N" True) (C1 (MetaCons "Min" PrefixI True) (S1 (MetaSel (Just Symbol "getMin") NoSourceUnpackedness NoSourceStrictness DecidedLazy) Par1))
type Rep (Min a) Source # 
type Rep (Min a) = D1 (MetaData "Min" "Data.Semiring" "semiring-num-0.7.0.0-LZTdLH4bZPrFoYJgqNzb7N" True) (C1 (MetaCons "Min" PrefixI True) (S1 (MetaSel (Just Symbol "getMin") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 a)))