When I learned my first programming language
I learned about functions.
A function is a thing you can call. The function might then return a value.
Then I learned about functional programming
And learned that those words did not mean that at all. Or at least that was not their full, universal meaning.
Those functions were actually procedures. Or subroutines. A function should be mathematical and pure. A mapping from a type to another.
Returning was not optional. All functions return, explicitly or implicitly, since function application must be assigned a value.
I learned new words too.
Functors are containers. Monads are powered-up functors with useful computational context.
Now that I’m learning about category theory…
…I’m learning that those words do not mean what I thought they meant, either.
Functions are apparently morphisms, or arrows, in the category of types. Functors are not containers, they are morphisms between categories. They are also their own category.
Monads are — I haven’t gotten to monads yet.
I read that they have a Monad in philosophy
And it means god. ¹