I might be able to answer this, as I’m just now trying to explain `Category` to beginners while being at best an advanced beginner myself.
The typical type annotation for a function looks like this:
id : a -> a
But we can think of that as just being shorthand, the same way operators are shorthand for functions. That is, we could think of that annotation like this:
id : (->) a a
In Purescript, there’s a name that corresponds to `(->)` in the same way that `(<<<)` corresponds to `compose`. It’s `Function`. So the above could be written like this:
id : Function a a
Just like a bunch of types (strings, lists, etc.) can be lumped under `Monoid` because they implement the ideas of “an empty element” and “combining two elements in an associative way”, `Function` is not unique. If you generalize a function to anything that “morphs”/converts one value to another (possibly of a different type), you get something called a “morphism”. (In the book I’m writing, I’m using lenses as an example of a non-function morphism. Correctly, I hope.)
So: if you type `id` like this: