Haskell beginner здесь имеет проблему, порождающую тип (.). (.) -
Prelude> :t ((.).(.))
((.).(.)) :: (b -> c) -> (a -> a1 -> b) -> a -> a1 -> c
Вот как я думаю: предположим (.). (.) принимает два аргумента A и B, то
(.).(.) A B = (.).(A.B)
и предположим, что приведенное выше принимает другой аргумент C -
(.).(A.B) C = (.)((A.B) C)
добавление аргумента D к вышесказанному -
(.)((A.B) C) D = ((A.B) C).D
где D, A, B, A.B и ((A.B) C) являются (возвратными) функциями и -
D :: a -> b
(A.B) C :: b -> c
A.B :: d -> b -> c
A :: e -> b -> c
B :: d -> e
C :: d
so (.). (.):: A → B → C → D становится -
(.).(.) :: (e -> b -> c) -> (d -> e) -> d -> a -> b
что на несколько световых лет от правильной сигнатуры типа.
Какой правильный вывод и что не так на моих шагах?