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

JSc*_*rtz -1 haskell

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

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

when (x == "Open" and y == "Ready") $ do...
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*zer 7

怎么样的

when (x == "Open" && y == "Ready") $ do
   ...
Run Code Online (Sandbox Code Playgroud)

&& 只是一个普通的中缀运算符定义为

True  && a = a
False && _ = False
Run Code Online (Sandbox Code Playgroud)

请注意,懒惰具有与其他语言完全相同的短路特性!


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

data StateOfFoo = Ready
                | Open
                | Closed
                | ...
                deriving(Eq)
Run Code Online (Sandbox Code Playgroud)

然后使用x == Open && y == Ready例如.通过这种方式,您可以清楚地了解您期望x和将来的类型y.