Я хочу что-то сделать в 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")
Это более красноречиво, но синтаксис не особенно приятен. Опять же, я не удивлюсь, если найду что-то встроенное, которое уже существует.
Какой предпочтительный способ сделать это?