1

我想创建一个表示变量的数据类型 Var。变量是a、b、c...z、小写或大写的字符。

我可以这样写:

data Var = A | B | C -- continues to Z

但我不能这样写:

data Var = a | b | c -- continues to z

大概是因为它们是小写的。有没有一种优雅的方法来制作这种数据类型?

4

2 回答 2

5

一种解决方案是简单地拥有

data Var = Var Char

虽然Var 'c'并且Var 'D'将根据需要填充类型,但不幸Var '%'的是也可以填充它。有两种方法可以解决此问题。一种是像您一样枚举所有构造函数:

data Var = A | B | C -- continues to Z
         | SmallA | SmallB | SmallC -- continues to z

仅让正确值进入类型的另一种方法是使用智能构造函数

于 2012-10-06T14:09:50.793 回答
4

不,没有 - 正如你所说,它们必须是大写的。

我会去

data Var = Var_A | Var_B | ... | Var_Z 
         | Var_a | Var_b | ... | Var_z

V_A | V_B等等。

另一种方法是使用

newtype Var = Var Char

但这会失去一些安全性,但实际上是为了阅读和展示。您必须确保在您的代码中没有无效Char的 s 以 s 结尾Var

(data Var_A | ...是很多样板代码,所以你可以只做 A 到 D,并编写只处理这些字母的代码,然后给自己设置一个小练习来编写一个 Haskell 程序来编写数据类型的源代码和解析为您提供功能!通过这样做,您将了解一些有关 Haskell 中的字符串操作的知识。)

((有模板 Haskell 之类的东西旨在为您完成样板工作,但它相当先进,您应该先学习字符串操作。另外,当我谈到这个话题时,一旦您真正知道自己在做什么做,看看 Scrap Your Boilerplate,这是一组非常先进的技术,用于编写好的、聪明的代码。不过,在你开始之前,你需要更多的 Haskell 经验。))

于 2012-10-06T14:08:06.330 回答