Hey!
I was browsing your code and noticed that there isnt an implementation of Functor for functions.
Another thing that i noticed is that you took the bi/tri/quad ... Functor generalization. I wonder if it would make sense to user specify whether fmap be covariant or contravariant, maybe that way profunctors/lenses etc. becomes represantable