Affects Version/s: None
Fix Version/s: None
AFAICT having fmap dispatch on the type of the second argument makes it practically impossible to define fmap for arbitrary functions, since the type is different for each function:
user> (type type)
user> (type fn?)
user> (type not=)
However, there's a perfectly reasonable definition of fmap for functions (fmap = comp).
To my mind the simplest/best thing to do is just have a Functor protocol and have fmap call a function in it, with the order of arguments reversed so that dispatch will happen correctly.