Monoid examples
We'll cover three types of monoid here:
- Name monoid
- Int slice monoid
- Line item monoid
That's right. We're going to turn that invoice into a monoid!
Name monoid
Let's see what we can do with a name. First, we define an interface that has two methods, Append
and Zero.
We wrap our name in nameContainer.
Our nameContainer
is a struct with a single string field, name
. Our Append
method appends the given name to the long name string it's building up that lives in the magical nameContainer
. Our zero morphism for our name string is an empty string.
The content of src/monoid/name_monoid.go
would look as follows:
package monoid type NameMonoid interface { Append(s string) NameMonoid Zero() string } func WrapName(s string) NameMonoid { return nameContainer{name: s} } type nameContainer struct { name string } func (s nameContainer) Append(name string) NameMonoid { s.name = s.name + name return s } func (nameContainer) Zero() string { return "" } func (s nameContainer) String...