为变量表示创建数据类型,由所有字母a..z,小写或大写表示

时间:2012-10-06 13:35:22

标签: haskell types

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

我可以这样写:

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

但我不能这样写:

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

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

2 个答案:

答案 0 :(得分:4)

一种解决方案就是

data Var = Var Char

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

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

只让正确的值进入类型的另一种方法是使用smart constructors

答案 1 :(得分:3)

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

我会去

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

V_A | V_B等。

另一种方法是使用

newtype Var = Var Char

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

data Var_A | ...是很多样板代码,所以你可以只做A到D,并编写代码只是处理这些字母,然后自己设置一点练习写一个Haskell程序来编写源代码数据类型的代码和解析函数!你将通过这样学习Haskell中的字符串操作。)

((有一个像模板Haskell这样的东西,它设计为你做样板工作,但它相当先进,你应该首先学习你的字符串操作。而且,当我在这个主题,一旦你真的知道你在做什么,看看Scrap Your Boilerplate,这是一堆非常先进的技术,用于编写好的,聪明的代码。在你达到这个目标之前,你需要更多的Haskell经验。)) < / p>