2016-09-08 49 views
1

看起来像一个非常基本的问题,但如果我有:如何测试异构数据构造函数?

data LogLevel = Info | Warning | Error Int 
x = Info 
y = Error 13 

我可以写

if (x==Info) 

,但我会怎么写类型错误的测试?

+1

可能的重复[如何Haskell做模式匹配没有我们在我们的数据类型定义一个Eq?](http://stackoverflow.com/questions/4718084/how-does-haskell-do-pattern-matching-without -us-definitions-an-eq-on-our-data-types)(当然不完全是这样,但希望通过该线程阅读将回答你的问题;但你发布的问题的简短答案是“模式匹配”) – jberryman

+0

非常感激。 – RoyM

回答

7

Error不是一种类型;它是一个数据构造函数。您可以使用模式匹配来区分LogLevel类型的各种值。

case x of 
    Info -> ... 
    Warning -> ... 
    Error n -> ... 

在这里,你不仅会采取正确的“分支”取决于x价值,但你也可以得到与Error相关联的特定整数(n),该模式匹配时。

+0

谢谢 - 这正是我所错过的 – RoyM