numhask
Safe HaskellNone
LanguageGHC2024

NumHask.Free.Multiplicative

Description

Free monoid — the initial encoding of Multiplicative.

Synopsis

Documentation

data Multiplicative a Source #

Free monoid over a carrier type.

The initial encoding of Multiplicative. Terms are built from one, times, and embed.

Constructors

One 
Times (Multiplicative a) (Multiplicative a) 
Embed a 

Instances

Instances details
Eq a => Eq (Multiplicative a) Source # 
Instance details

Defined in NumHask.Free.Multiplicative

Show a => Show (Multiplicative a) Source # 
Instance details

Defined in NumHask.Free.Multiplicative

one :: Multiplicative a Source #

Multiplicative identity.

times :: Multiplicative a -> Multiplicative a -> Multiplicative a Source #

Multiplication with identity absorption.

times one a = a
times a one = a

embed :: a -> Multiplicative a Source #

Embed a carrier value as an atomic generator.

lift :: (Eq a, Multiplicative a) => a -> Multiplicative a Source #

Lift a carrier value, absorbing the multiplicative identity.

>>> lift 1
One

normalize :: (Eq a, Multiplicative a) => Multiplicative a -> Multiplicative a Source #

Normalize a term with respect to monoid laws.

>>> normalize (embed 1)
One

eval :: Multiplicative a => Multiplicative a -> a Source #

Evaluate a term into any Multiplicative.

This is the unique homomorphism out of the free monoid.

foldMultiplicative :: b -> (b -> b -> b) -> (a -> b) -> Multiplicative a -> b Source #

Universal property: fold with a target monoid.

flatten :: Multiplicative a -> [a] Source #

Flatten a term to a list of embedded generators, discarding identities.