Ответ 1
Функция id
имеет этот тип:
id :: a -> a
Вы получаете экземпляр этого типа при замене a
на a -> b
:
id :: (a -> b) -> (a -> b)
который из-за currying совпадает с:
id :: (a -> b) -> a -> b
Теперь примените flip
к этому, и вы получите:
flip id :: a -> (a -> b) -> b
В случае id (+)
экземпляр:
id :: (Num a) => (a -> a) -> (a -> a)
Теперь flip id
дает вам:
flip id :: (Num a) => a -> (a -> a) -> a
Примечание: это также показывает, как ($)
совпадает с id
, только с более ограниченным типом:
($) :: (a -> b) -> a -> b
($) f x = f x
-- unpoint:
($) f = f
-- hence:
($) = id