我目前正在为大学学习 Haskell。给定以下haskell代码:
true::t -> t1 -> t
true = (\x y -> x)
false::t -> t1 -> t1
false = (\x y -> y)
-- Implication
(==>) = (\x y -> x y true)
任务是确定函数的类型(==>)
。GHCi 说是(==>) :: (t1 -> (t2 -> t3 -> t2) -> t) -> t1 -> t
。
我可以看到评估顺序如下(因为类型保持不变):
(==>) = (\x y -> (x y) true)
所以函数true
ist 参数(x y)
。
谁能解释为什么结果类型 t 绑定到第一个参数的结果以及 GHCi 以哪种方式确定 t 的类型(==>)
?