-1

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

让我为我的问题提供更多背景信息。我正在用 Haskell 进行我自己的类型推断。我的数据类型如下所示:

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

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

4

1 回答 1

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. 请注意,其中包含空字符串。

于 2012-12-08T10:26:53.107 回答