(.)
- функция композиции, ее тип -
(.) :: (b -> c) -> (a -> b) -> (a -> c)
Итак, мы знаем, что, поскольку вы составляете x
и y
, они должны быть функциями и иметь такие типы:
x :: a -> b
y :: a' -> b'
Обратите внимание, что когда вы составляете две функции, тип вывода функции справа должен совпадать с типом ввода функции слева. Следовательно, когда вы делаете x . y
, мы можем сделать вывод, что b'
и a
относятся к одному типу. Точно так же мы можем сделать вывод, что a'
и b
относятся к одному типу. Это дает нам следующее:
(y . x) :: a -> a
(x . y) :: b -> b
Однако затем вы применили обе эти функции к z
, что означает, что a
и b
должны быть одного и того же типа, а именно типа z
, поэтому мы можем сделать вывод, что
(y . x) :: a -> a
(x . y) :: a -> a
z :: a
Наконец, переменная a
- это просто фиктивная переменная, которая фактически не используется в определении функции, поэтому она получает переменную другого типа.
person
Emil
schedule
02.03.2014
\a -> b
) отличается от приложения функции (f x
) и композиции функции (x . y
, которая на самом деле является просто типом приложения функции) вместе с чтением функции, уменьшенной по эталону (plus = (+)
vsplus a b = a + b
). - person Thomas M. DuBuisson   schedule 03.03.2014