1
看起来像一个非常基本的问题,但如果我有:如何测试异构数据构造函数?
data LogLevel = Info | Warning | Error Int
x = Info
y = Error 13
我可以写
if (x==Info)
,但我会怎么写类型错误的测试?
看起来像一个非常基本的问题,但如果我有:如何测试异构数据构造函数?
data LogLevel = Info | Warning | Error Int
x = Info
y = Error 13
我可以写
if (x==Info)
,但我会怎么写类型错误的测试?
Error
不是一种类型;它是一个数据构造函数。您可以使用模式匹配来区分LogLevel
类型的各种值。
case x of
Info -> ...
Warning -> ...
Error n -> ...
在这里,你不仅会采取正确的“分支”取决于x
价值,但你也可以得到与Error
相关联的特定整数(n
),该模式匹配时。
谢谢 - 这正是我所错过的 – RoyM
可能的重复[如何Haskell做模式匹配没有我们在我们的数据类型定义一个Eq?](http://stackoverflow.com/questions/4718084/how-does-haskell-do-pattern-matching-without -us-definitions-an-eq-on-our-data-types)(当然不完全是这样,但希望通过该线程阅读将回答你的问题;但你发布的问题的简短答案是“模式匹配”) – jberryman
非常感激。 – RoyM