【发布时间】:2014-04-29 12:21:10
【问题描述】:
Haskell 中的列表可能如下所示:
data List a = Nil | Cons a (List a)
类型论的解释是:
λα.μβ.1+αβ
将列表类型编码为仿函数的不动点。在 Haskell 中,这可以表示为:
data Fix f = In (f (Fix f))
data ListF a b = Nil | Cons a b
type List a = Fix (ListF a)
我很好奇早期的 μ binder 的范围。绑定在外部范围内的名称可以在内部范围内保持可用吗?比如说,以下是一个有效的表达式:
μγ.1+(μβ.1+γβ)γ
...也许和以下一样:
μβ.μγ.1+(1+γβ)γ
...但是当名称被重用时,情况会如何变化:
μβ.μγ.1+(μβ.1+γβ)γ
以上都是正则类型吗?
【问题讨论】:
-
我认为
type List = ...应该是type List a = ...。 -
谢谢@eriksensei - 我修好了。
标签: haskell types recursive-datastructures fixpoint-combinators