你能在WHEN条款中进行多次评估吗?

时间:2014-08-03 02:46:24

标签: haskell

您可以在WHEN子句中进行多次评估吗?

例如,有没有办法做这样的事情:

when (x == "Open" and y == "Ready") $ do...

我可以得到一个单独的条件,但如果我需要两者都是真的怎么办?

1 个答案:

答案 0 :(得分:7)

这样的东西
when (x == "Open" && y == "Ready") $ do
   ...

&&只是一个定义为

的普通中缀运算符
True  && a = a
False && _ = False

请注意,懒惰会产生与其他语言完全相同的短路属性!


在一个完全独立的注释中,Haskell-ish方式不是使用字符串来表示不同的状态,而是定义自己的类型

data StateOfFoo = Ready
                | Open
                | Closed
                | ...
                deriving(Eq)

然后使用x == Open && y == Ready。这样,您就可以在类型中清楚地表达您期望的xy