123456789101112131415161718192021222324252627282930313233343536(** A type of values with an associative operation and an identity element, for
example, integers with addition and zero.
This module type is accessible as [Stdune.Monoid.Basic] outside of [Stdune]. *)moduletypeBasic=sigtypet(** Must be the identity of [combine]:
- combine empty t = t
- combine t empty = t *)valempty:t(** Must be associative:
- combine a (combine b c) = combine (combine a b) c *)valcombine:t->t->tend(** This module type extends the basic definition of a monoid by adding a
convenient operator synonym [( @ ) = combine], as well as derived functions
[reduce] and [map_reduce].
This module type is accessible as just [Stdune.Monoid] outside of [Stdune]. *)moduletypeS=sigincludeBasicmoduleO:sig(** An operator alias for [combine]. *)val(@):t->t->tendvalreduce:tlist->tvalmap_reduce:f:('a->t)->'alist->tend