我想在哈斯克尔做这样的事情:
main1 = do s <- getLine
if s == "foo" then putStr "You entered foo"
显然,这是不合法的,因为没有 else
。一个替代方案,我已经想到:
nop :: IO ()
nop = sequence_ []
main2 = do s <- getLine
if s == "foo" then putStr "You entered foo" else nop
这有点冗长,但如果有必要,我会接受的。不过,如果没有内置版本的 nop
,我会感到惊讶。
或者:
doIf :: Bool -> IO () -> IO ()
doIf b m = if b then m else nop
main3 = do s <- getLine
doIf (s == "foo") (putStr "You entered foo")
这样更简洁,但语法不是特别好。同样,如果发现已经存在内置的东西,我也不会感到惊讶。
这样做的首选方法是什么?