【发布时间】:2016-06-05 15:25:00
【问题描述】:
人们常说
tru t f = t
fls t f = f
在“我们可以使用这些术语来执行测试布尔值真实性的操作”的意义上表示 True 和 False。
但这隐藏了一个重要的警告,它似乎只在无类型的 lambda 演算中才成立。如果我只是将这些值插入到 haskell 中,我可以编写一个函数:
tryMeOnFalse ∷ (∀ t f. t → f → t) → String
tryMeOnFalse tr = "Hi"
a' = tryMeOnFalse tru
b' = tryMeOnFalse fls -- type error !
在类型级别区分 tru 和 fls。这么说会有多错误/真实:
- 在 STLC 中,
tru和fls是一些提升的'Boolean类型的价值级别见证,类型为'True和'False - 在 STLC 中,(强制)类型化值
(tru :: ∀ t . t → t → t)和(fls :: ∀ t . t → t → t)代表 True 和 False(在未类型化中,通常情况下)
编辑:感谢@Daniel Wagner 的回答,我现在意识到我在考虑二阶 Lambda 微积分,而不是我的问题中的 STLC。
【问题讨论】:
标签: haskell data-kinds church-encoding