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