fail is useful for the error monad,
Either String a.
return is the only method of the
Pointed class then
Pointed should be included in the hierarchy. Better to be exactly mathematically correct once and for all.
Pure vs. return
return, perhaps we should call it
pure, or something else that is not
return? It would defy convention, yes, but we would already be making changes that would require a Legacy module for backwards compatability, and it may reduce confusion over what the function actually does, because Haskell's
return is nothing like "return" in other languages.