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 = ...
。 - Erik Post