给定一个涉及类型变量的类型,有没有办法定义一个类型变量的无限列表,其中不会重复任何类型变量?
让我提出更多关于我的问题的背景。我正在Haskell中进行自己的类型推断。我的数据类型如下所示:
data Ty = TyUnit
| TyVar String
| TyBool
| TyInt
| TyBoolList
| TyIntList
| Arrow Ty Ty
我给出了上述类型的定义。我相信该函数应该生成一个无限的变量名列表。我只是对如何继续和问题的实际实施感到困惑。
答案 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
的想法。请注意,包含空字符串。