ELI5: Monoids
Published on 20180522
2 min read
In category
functional programming
Monoid:
We have a thing, perform some action on it, get that same type of thing back.
Say I have a big bowl of candy:

I can add another smaller bowl of candies to that bowl and I'd still have a big bowl of candies

I can dump an empty bowl of candy into my big bowl of candy and I'd end up with the same big bowl of candy

I can add to the big bowl of candies:
 all the candies from a little red bowl and then add all the candies from a little blue bowl
OR
 all the candies from a little blue bowl and then add all the candies from a little red bowl
It doesn't matter how I do this because I'll still have a big bowl of candy at the end.
And now for the nonELI5:
The important thing to note here is that the above would not be true for all "things" or for all "actions". Say for instance instead of "big bowl of candies" I instead used, "Getting ready for school in the morning (showering then getting dressed)". We see a logical failure immediately:
 I can't get dressed before I take a shower (that would be a mess)
So "being ready for school in the morning" under the action "showering" is not a monoid.
Monoid is a grossly academic/mathematic word that basically means a set that is closed under a specific action (operation). To be more "computer sciencey", strings (being the set) under concatenation (the operation) are a monoid:
 (Closure) Adding a string to a string still results in a string, i.e. we're still in the "set" of strings
 (Associativity) Adding an empty string to a string (say,
'' + 'cat'
) will give you'cat'
back  (Identity) Adding
string1
tostring2
or vice versa will still give you a string back, i.e. we're still in the "set" of strings
This wouldn't work for strings under the operation of equality (==
) because instead of having a string returned to us, we'd instead get a boolean.
So...
 A Monoid is just a thing that holds true to the above three rules
Hopefully you are now a more enlightened fiveyearold.