如何在Haskell中表达以​​下if-else if-else语句?

JSc*_*rtz 2 haskell

我试图在Haskell中复制以下要求/代码

伪代码(实际评估要复杂得多):

if (x == 1)
   doX()
else if (y == 1)
   doY()
else if (z == 1)
   doZ()
else
   doSomethingElse()
Run Code Online (Sandbox Code Playgroud)

现在我把它作为每个的WHEN语句,但这并没有给我一个ELSE,所以我有

when (x == 1) $ do doX
when (y == 1) $ do doY
when (z == 1) $ do doZ
Run Code Online (Sandbox Code Playgroud)

但那我该如何管理我的其他人呢?

bhe*_*ilr 5

对于警卫或案件陈述来说,这看起来是个不错的选择.你可以做点什么

myAction :: Monad m => Int -> Int -> Int -> m ()
myAction x y z
    | x == 1 = doX
    | y == 1 = doY
    | z == 1 = doZ
    | otherwise = doSomethingElse
Run Code Online (Sandbox Code Playgroud)

或者您可以使用MultiWayIf扩展名:

myAction :: Monad m => m ()
myAction = do
    x <- getX
    y <- getY
    z <- getZ
    if | x == 1 -> doX
       | y == 1 -> doY
       | z == 1 -> doZ
       | otherwise -> doSomethingElse
    -- continue doing more stuff in myAction as needed
Run Code Online (Sandbox Code Playgroud)