Ответ 1
Кажется, моя ошибка исходит от применения трех точек в неправильном порядке.
J. Abrahamson answer отлично, но я не точно следую его шагу -
((.) (.) (.) :: (b'' -> c'') -> (a' -> b') -> (a' -> c'))
^^^^^^^^^^^^ ^^^^^^^^^^
из-за того, что его "смешивает" первый и второй аргументы от второго и третьего типов точек.
Я думаю, что у меня есть ответ после моего первоначального трека мыслей -
(.).(.) A = (.)((.) A)) ==> add arg B ==> (.)((.) A)) B = ((.) A).B ==>
add arg C ==> ((.) A).B C = ((.) A)(B C) ==> add arg D ==> ((.) A)(B C) D
где A, ((.) A), (B C) - функции -
let A :: b -> c
then ((.) A) :: (a -> b) -> a -> c
so B C :: a -> b
B :: a1 -> a -> b
C :: a1
D :: a
и (.). (.) A B C D расширяется до -
(.).(.) :: (b -> c) -> (a1 -> a -> b) -> a1 -> a -> c