
Lennart Augustsson wrote:
Why do people think that you should be able to understand everything without ever looking things up? I'll get back to my example from the comment on the blog post. If I see 'ghee' in a cook book I'll check what it is (if I don't know). It has a precise meaning and next time I'll know. Inventing a new word for it serves no purpose, but to confuse people. Parts of Computer Science seem to love to invent new words for existing concepts. Again, I think this just confuses people in the long run. Or use existing words in a different way (like 'functor' in C++.)
ghee is ghee. There are variations of ghee, but when a cookbook calls for ghee, just about any variation will work fine. Furthermore, whenever a cookbook calls for ghee, you are making food. Conversely a monoid is an algebraic structure. A Monoid (the type class) is an abstraction used to ensure that a particular variation of a monoid is actually representative of a monoid. There are many variations (:i Monoid shows 17 instances). Most are used for different purposes and few are interchangeable for a given purpose. Inventing new words definitely serves a purpose; it is a form of abstraction. We need new words to manage conceptual complexity just as we build abstractions to manage code complexity. In fact, Monoid was once a new word that was invented to serve that very purpose. I don't think the solution to this problem is to rename it to Appendable. I think the "solution" is to allow programmers to alias Monoid as Appendable similar to the way you can alias a module when you imort it. The details of that solution would be very difficult to introduce though. Drew P. Vogel