我目前正在学习大学的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
是(x y)
的参数。
有人能解释一下为什么结果类型t绑定到第一个参数的结果上,以及GHCi如何确定(==>)
的类型吗?