【发布时间】:2010-10-24 09:17:11
【问题描述】:
我想在 Haskell 中做一些看起来像这样的事情:
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")
这样比较简洁,但是语法不是特别好。同样,如果发现已经存在的内置内容,我不会感到惊讶。
最好的方法是什么?
【问题讨论】: