您可以在WHEN子句中进行多次评估吗?
例如,有没有办法做这样的事情:
when (x == "Open" and y == "Ready") $ do...
我可以得到一个单独的条件,但如果我需要两者都是真的怎么办?
答案 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
。这样,您就可以在类型中清楚地表达您期望的x
和y
。