无限的类型变量列表 - 类型推断

时间:2012-12-08 07:31:14

标签: haskell type-inference

给定一个涉及类型变量的类型,有没有办法定义一个类型变量的无限列表,其中不会重复任何类型变量?

让我提出更多关于我的问题的背景。我正在Haskell中进行自己的类型推断。我的数据类型如下所示:

data Ty = TyUnit
        | TyVar String
        | TyBool
        | TyInt
        | TyBoolList
        | TyIntList
        | Arrow Ty Ty

我给出了上述类型的定义。我相信该函数应该生成一个无限的变量名列表。我只是对如何继续和问题的实际实施感到困惑。

1 个答案:

答案 0 :(得分:1)

你走了。

allTys 0 = TyUnit : TyVar "?" : TyBool : TyInt : TyBoolList :  TyIntList : []
allTys n = [0..n-1] >>= (\i -> liftM2 Arrow (allTys i) (allTys (n-1-i))) 

allTypes = [0..] >>= allTys

allTys n构造一个高度为n的类型树。这里Arrow x y的高度是x的高度+ y + 1的高度,其他所有的高度都是0.构造非常基本。我不确定它是否可以更快地完成。在评论中询问是否需要更多解释。

此外,如果需要,这是如何获取字母表中的所有字符串(例如['a'..'z'])。

strings alphabet = (:) [] $ liftM2 (flip (:)) (strings alphabet) alphabet

长字符串是somechar:shortstring的想法。请注意,包含空字符串。