Может кто-нибудь помочь мне понять это/указать мне на некоторые материалы для чтения? Следующее прекрасно работает:
type F a b = Functor f => f a -> f b
fComp :: F b c -> F a b -> F a c
fComp f f' = f . f'
Но если я пишу fComp = (.)
вместо этого, проверяющий тип жалуется:
Couldn't match type ‘b0 -> f c’
with ‘forall (f1 :: * -> *). Functor f1 => f1 b -> f1 c’
(Этот конкретный пример не особенно полезен, я просто пытаюсь сжать пример, который появился при изучении линз.)