Haskell заставляет id
соответствовать типу первого аргумента для flip
путем установки a = b -> c
. Итак:
flip :: ( a -> b -> c) -> b -> a -> c
flip :: ((b -> c) -> b -> c) -> b -> (b -> c) -> c
flip id :: b -> (b -> c) -> c
где id
относится к типу
id :: (b -> c) -> b -> c
, что эквивалентно
id :: (b -> c) -> (b -> c)
т.е. специализация id
, которая применяется только к унарным функциям.
Редактировать: я думаю, что я мог бы перефразировать мою первую строку как:
Haskell выводит , что id
соответствует типу первого аргумента для flip
, если a = b -> c
.
На случай, если это станет понятнее.