Представьте себе, что на минуту у нас было что-то вроде следующего.
class MoreAccurateFunctor c d f where
fmap :: c a b -> d (f a) (f b)
Поскольку (->)
является экземпляром Category
(это Hask ), мы бы получилиFunctor ~ MoreAccurateFunctor (->) (->)
.
Теперь представьте, что у нас есть Dual (->)
, двойная категория (->)
(это будет Hask Op , и у нас будет Dual (->) a b ~ (b -> a)
), у нас было бы это Contravariant ~ MoreAccurateFunctor (Dual (->)) (->)
.
Я не знаю, помогает ли это, но идея состоит в том, чтобы указать на тот факт, что Functor
и Contravariant
являются двумя специализациями MoreAccurateFunctor
, в то время какэтот последний класс ближе к определению функтора в теории категорий.