# Module `Alg_structs__.Monoid`

## Seed

## Interface

`module type S = sig ... end`

A monoid is a set of objects with an associative binary operation over it and a privileged

`unit`

element that acts as an identity.

## Laws

## Constructors

Module functors for creating implementations of Monoid

`module Make : functor (Seed : Seed) -> S with type t = Seed.t`

`Make S`

is a implementation of Monoid grown from the implementation of the`Seed`

.

`val make : 'a -> ('a -> 'a -> 'a) -> (module S with type t = 'a)`

`make (unit : t) (op : t -> t -> t)`

is an implementation of Monoid over the type`t`

with the given`unit`

and`op`

`val of_semigroup : (module Alg_structs.Semigroup.S with type t = 'a) -> 'a -> (module S with type t = 'a)`

`of_semigroup semi unit`

forms an implementation of Monoid by enriching the give semigroup`semi`

with the`unit`

## Implementations

`module Bool : sig ... end`

Monoids over

`bool`

`module Int : sig ... end`

Monoids over

`int`

`module Option : sig ... end`

Semigroups over option types

`module Endo : sig ... end`

See

`Semigroup.Endo`

`module Dual : sig ... end`

See

`Semigroup.Dual`