Identity function returns the same _value_.
If it's only the same _type_, but the value is not the same, then it's an endomorphism. The function definitions look the same `a -> a`.
string reversal, integer negation or toUpperCase are classical examples of endomorphisms.
Identity is a specific case of endomorphism.
string reversal, integer negation or toUpperCase are classical examples of functions which will not compile as `a -> a`
The function which will compile as `a -> a` is the identity function.