Published on 2018-05-22
2 min read
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
- 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 non-ELI5:
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 science-y", 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
- (Identity) Adding
string2or 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.
- A Monoid is just a thing that holds true to the above three rules
Hopefully you are now a more enlightened five-year-old.