• IIRC monoid also requires you to have zero, so that an initial value is known for any repetitive operation. In case of an array that’d be an empty one, in case of promise that’d be doing nothing, I guess.

    • Indeed, the identity element. I can’t remember if it’s required or just a nice to have - I’m leaning in agreement towards required.

      Zero for integers, the empty string, an empty array, Promise.resolve(), an empty grocery list.

      There’s a fantastic blog post out there, I can’t recall the name, that talks about modeling things with monoids - a list of package dependencies, for ex, is a monoid.

      I believe there’s a similar identity concept for endofunctors, ie some identity function that does not modify their contents, ex ((a)=>a)