l\=      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     Haskell semiringsMITmail@doisinkidney.com experimentalNone/56IThe " .https://ncatlab.org/nlab/show/max-plus+algebraArctic0" or max-plus semiring. It is a semiring where:  =    = -" -- represented by   =   =  Note that we can't use  from % because annihilation needs to hold: -"  x = x  -" = -"Taking -" to be " would break the above law. Using " to represent it follows the law.The " /https://ncatlab.org/nlab/show/tropical+semiringTropical0" or min-plus semiring. It is a semiring where:  =     = " -- represented by   =   =  Note that we can't use   from % because annihilation needs to hold: "  x = x  " = "Taking " to be !" would break the above law. Using " to represent it follows the law. Monoid under . Analogous to   , but uses the   constraint, rather than ".  Monoid under . Analogous to   , but uses the   constraint, rather than ". A  &https://en.wikipedia.org/wiki/SemiringSemiring% is like the the combination of two   s. The first is called ; it has the identity element  /, and it is commutative. The second is called ; it has identity element , and it must distribute over .LawsNormal # laws (a  b)  c = a  (b  c)    a = a    = a (a  b)  c = a  (b  c)   a = a   = aCommutativity of  a  b = b  aDistribution of  over  a  (b  c) = (a  b)  (a  c) (a  b)  c = (a  c)  (b  c) Annihilation    a = a    =  The identity of .The identity of .8An associative binary operation, which distributes over .-An associative, commutative binary operation.#Takes the sum of the elements of a $. Analogous to % on numbers, or & on 's. add [1..5]15add [False, False]Falseadd [False, True]Trueadd [True, undefined]True'Takes the product of the elements of a $. Analogous to ( on numbers, or ) on 's. mul [1..5]120mul [True, True]Truemul [True, False]Falsemul [False, undefined]FalseSThis 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. * (* a)hIs a valid encoding of church numerals, with addition and multiplication being their semiring variants.TThe (->)& instance is analogous to the one for #.Y(getMin . foldMap pure) [1..10]Just 1Z(getMax . foldMap pure) [1..10]Just 10qA polynomial in x: can be defined as a list of its coefficients, where the i!th element is the coefficient of x^i6. This is the semiring for such a list. Adapted from  Nhttps://pdfs.semanticscholar.org/702d/348c32133997e992db362a19697d5607ab32.pdfhere.rThe +   is  for , and a Cartesian product for .w , - !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst     k  ,   - !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst76None234IAThe free semiring. Adapted from PureScript's version, available  Zhttps://pursuit.purescript.org/packages/purescript-semirings/3.0.0/docs/Data.Semiring.Freehere9. Only a valid semiring if treated as a multiset, as in: Free [[1],[0]] == Free [[0],[1]]TrueRun a .Run a -, interpreting it in the underlying semiring.%Extremely slow. For testing purposes. ./ ./.9 "Some interesting numeric semiringsMITmail@doisinkidney.com experimentalNone245IDUseful for optimizing multiplication, or working with large numbers. () = (0) x  y = -(1 (2 (-x) + 2 (-y)))   = " -- represented by   = 0 ;https://en.wikipedia.org/wiki/Semiring#cite_ref-droste_14-0 Wikipedia& has some information on this. Also  Shttp://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.304.6152&rep=rep1&type=pdfthis3 paper. Apparently used for probabilistic parsing. () =  () = ()   =    =  ;https://en.wikipedia.org/wiki/Semiring#cite_ref-droste_14-0 Wikipedia& has some information on this. Also  Shttp://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.304.6152&rep=rep1&type=pdfthis paper. () =  x  y =  0 (x 0 y 3 1)   =    = Positive numbers only. () = 4 () = 5   =    = $Useful for some constraint problems. () =  () =     =   = !Only expects positive numbers&66(Some QuickCheck properties for SemiringsMITmail@doisinkidney.com experimentalNoneTPlus is associative.Multiplication is associative.Plus is commutative. Multiplication distributes left.!Multiplication distributes right.Additive identity.Multiplicative identity.Annihilation of  by  .    7   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&$'(!")$'*$+,$% $-.$-/$-0!12$-3$-4$ 56789:;<$+=$>?$>@$+A$BC$BD9E+semiring-num-0.6.0.0-3Tik01yeFpn7w0QSoV9lQ1 Data.SemiringData.Semiring.FreeData.Semiring.Numeric Test.SemiringData.SemigroupMaxData SemigroupMin Data.MonoidProductSumMonoidData.SetuniongetMaxgetMinMulgetMulAddgetAddSemiringzeroone<.><+>addmul$fSemiring(,,,,)$fSemiring(,,,)$fSemiring(,,) $fSemiring(,)$fSemiringFixed$fSemiringComplex$fSemiringRatio$fSemiringNatural$fSemiringCDev$fSemiringCIno$fSemiringCMode$fSemiringCOff$fSemiringCPid$fSemiringCSsize$fSemiringCGid$fSemiringCNlink$fSemiringCUid $fSemiringCCc$fSemiringCSpeed$fSemiringCTcflag$fSemiringCRLim $fSemiringFd$fSemiringWordPtr$fSemiringIntPtr$fSemiringCChar$fSemiringCSChar$fSemiringCUChar$fSemiringCShort$fSemiringCUShort$fSemiringCInt$fSemiringCUInt$fSemiringCLong$fSemiringCULong$fSemiringCLLong$fSemiringCULLong$fSemiringCFloat$fSemiringCDouble$fSemiringCPtrdiff$fSemiringCSize$fSemiringCWchar$fSemiringCSigAtomic$fSemiringCClock$fSemiringCTime$fSemiringCUSeconds$fSemiringCSUSeconds$fSemiringCIntPtr$fSemiringCUIntPtr$fSemiringCIntMax$fSemiringCUIntMax$fSemiringDouble$fSemiringFloat$fSemiringWord64$fSemiringWord32$fSemiringWord16$fSemiringWord8$fSemiringWord$fSemiringInteger$fSemiringInt64$fSemiringInt32$fSemiringInt16$fSemiringInt8 $fSemiringInt $fSemiringAll $fSemiringAny$fSemiringEndo$fSemiring(->) $fBoundedMax $fBoundedMin $fSemiringMin $fSemiringMax $fMonoidMin $fMonoidMax$fSemigroupMin$fSemigroupMax $fMonadMin $fMonadMax$fApplicativeMin$fApplicativeMax$fOrdMax$fOrdMin $fSemiringMul $fSemiringAdd $fMonoidMul $fMonoidAdd$fSemigroupMul$fSemigroupAdd $fMonadMul $fMonadAdd$fApplicativeMul$fApplicativeAdd $fFoldableMul $fFoldableAdd $fFunctorMul $fFunctorAdd $fSemiring[] $fSemiringSet $fSemiring()$fSemiringBool$fEqAdd$fOrdAdd $fReadAdd $fShowAdd $fBoundedAdd $fGenericAdd $fGeneric1Add$fNumAdd $fEnumAdd $fStorableAdd$fFractionalAdd $fRealAdd $fRealFracAdd$fEqMul$fOrdMul $fReadMul $fShowMul $fBoundedMul $fGenericMul $fGeneric1Mul$fNumMul $fEnumMul $fStorableMul$fFractionalMul $fRealMul $fRealFracMul$fEqMin $fReadMin $fShowMin $fGenericMin $fGeneric1Min $fFunctorMin $fFoldableMin$fEqMax $fReadMax $fShowMax $fGenericMax $fGeneric1Max $fFunctorMax $fFoldableMax$fSemiringConst$fSemiringIdentity $fSemiringSum$fSemiringProductFreegetFreeliftFreeunFree $fOrdFree$fEqFree$fApplicativeFree$fSemiringFree $fShowFree $fReadFree $fFunctorFree$fFoldableFree$fTraversableFree $fMonoidFreeLoggetLogViterbi getViterbi ŁukasiewiczgetŁukasiewiczDivision getDivision Bottleneck getBottleneck$fMonadViterbi$fMonadŁukasiewicz$fMonadDivision$fMonadBottleneck$fApplicativeViterbi$fApplicativeDivision$fApplicativeŁukasiewicz$fApplicativeBottleneck$fFoldableViterbi$fFoldableŁukasiewicz$fFoldableDivision$fFoldableBottleneck$fFunctorViterbi$fFunctorŁukasiewicz$fFunctorDivision$fFunctorBottleneck$fOrdLog $fSemiringLog$fSemiringViterbi$fSemiringŁukasiewicz$fSemiringDivision$fSemiringBottleneck$fEqBottleneck$fOrdBottleneck$fReadBottleneck$fShowBottleneck$fBoundedBottleneck$fGenericBottleneck$fGeneric1Bottleneck$fNumBottleneck$fEnumBottleneck$fStorableBottleneck$fFractionalBottleneck$fRealBottleneck$fRealFracBottleneck $fEqDivision $fOrdDivision$fReadDivision$fShowDivision$fBoundedDivision$fGenericDivision$fGeneric1Division $fNumDivision$fEnumDivision$fStorableDivision$fFractionalDivision$fRealDivision$fRealFracDivision$fEqŁukasiewicz$fOrdŁukasiewicz$fReadŁukasiewicz$fShowŁukasiewicz$fBoundedŁukasiewicz$fGenericŁukasiewicz$fGeneric1Łukasiewicz$fNumŁukasiewicz$fEnumŁukasiewicz$fStorableŁukasiewicz$fFractionalŁukasiewicz$fRealŁukasiewicz$fRealFracŁukasiewicz $fEqViterbi $fOrdViterbi $fReadViterbi $fShowViterbi$fBoundedViterbi$fGenericViterbi$fGeneric1Viterbi $fNumViterbi $fEnumViterbi$fStorableViterbi$fFractionalViterbi $fRealViterbi$fRealFracViterbi$fEqLog $fReadLog $fShowLog $fGenericLog $fGeneric1Log $fFunctorLog $fFoldableLog$fApplicativeLog $fMonadLog plusAssocmulAssocplusComm mulDistribL mulDistribRplusIdmulId annihilate unaryLaws binaryLaws ternaryLawsghc-prim GHC.ClassesmaxbaseGHC.BaseNothingGHC.EnumminBoundminmaxBoundGHC.NumNum Data.FoldableFoldablesumor GHC.TypesBoolproductandEndocontainers-0.5.7.1 Data.Set.BaseSet WrapBinarycartProd.# isAnagram+ GHC.Floatlogexp-GHC.Realgcdlcm