如何对无限列表使用任意?

How to use arbitrary for a infinite list?

我有以下帮助功能:

    -- Generator for variable names
instance Arbitrary VarName where
  arbitrary = VarName <$> elements ["A", "B", "_0", "_"]

针对以下任务: “定义一个函数 freshVars :: [Varname],它为您提供以下模式的无限变量名列表:

[变量名“A”,…,变量名“Z”,变量名“A0”,…,变量名“Z0”,变量名“A1”,…,变量名“Z1”,…]

我该怎么做?我想我没有正确理解任意性。

我们可以用 ["", "0", "1", …, "9", "10", "11", …, "99", …] 创建一个列表:

suffixes :: [String]
suffixes = "" : map show [0 ..]

现在我们已经有了,我们可以做一个列表理解,它将构造带有前缀 Character 的字符串,该字符串将枚举 ['A' .. 'Z'] 并使用后缀的一项。我们可以用 list comprehension:

freshVars :: [String]
freshVars = [VarName (… : …) | … <- …, … <- … ]

我将填写 部分作为练习。