Кажется, вы можете просто заявить:
import qualified Control.Category as Cat instance Cat.Category q => Functor (q r) where fmap = (Cat..)
Есть что-нибудь, что говорит против этого?
Этот экземпляр будет перекрываться со многими другими полезными экземплярами, например, нельзя больше добавить
instance Functor (State s) where ...
для монады State s.
State s