ideally we would want to split it up like so (but with more mathematically
Might it also be reasonable to provide less mathematical names for some
classes, and possibly allow users to let the compiler know which ones they
find more readable? A lot of users would find Mappable more intuitive than
Functor for example, and the improved error messages might make it more
practical to call fmap map again.