Я читал анонс ClassyPrelude и попал сюда:
instance (b ~ c, CanFilterFunc b a) => CanFilter (b -> c) a where
filter = filterFunc
Затем автор сказал, что это не сработает:
instance (CanFilterFunc b a) => CanFilter (c -> c) a where
filter = filterFunc
Что имеет смысл для меня, так как c
полностью не связан с ограничением слева.
Однако, что не упоминается в статье, и что я не понимаю, почему это не сработает:
instance (CanFilterFunc b a) => CanFilter (b -> b) a where
filter = filterFunc
Может кто-нибудь объяснить, почему это отличается от первого упомянутого определения? Возможно, полезный пример вывода типа GHC был бы полезен?