monoids-0.3.2: Deprecated: Use 'reducers'

Portabilityportable (but instances use MPTCs)
Stabilityexperimental
Maintainerekmett@gmail.com
Safe HaskellSafe-Infered

Data.Monoid.Multiplicative

Contents

Description

When dealing with a Ring or other structure, you often need a pair of Monoid instances that are closely related. Making a newtype for one is unsatisfying and yields an unnatural programming style.

A Multiplicative is a Monoid that is intended for use in a scenario that can be extended to have another Monoid slot in for addition. This enables one to use common notation.

Any Multiplicative can be turned into a Monoid using the Log wrapper.

Any Monoid can be turned into a Multiplicative using the Exp wrapper.

Instances are supplied for common Monads of Monoids, in a fashion which can be extended if the Monad is a MonadPlus to yield a RightSemiNearRing

Instances are also supplied for common Applicatives of Monoids, in a fashion which can be extended if the Applicative is Alternative to yield a RightSemiNearRing

Synopsis

Documentation

Multiplicative to Monoid

data Log m Source

Convert a Multiplicative into a Monoid. Mnemonic: Log a + Log b = Log (a * b)

Constructors

Log 

Fields

getLog :: m
 

Instances

Monoid to Multiplicative

data Exp m Source

Convert a Monoid into a Multiplicative. Mnemonic: Exp a * Exp b = Exp (a + b)

Constructors

Exp 

Fields

getExp :: m
 

Instances