Quiero hacer algo en Haskell que se vea así:
main1 = do s <- getLine
if s == "foo" then putStr "You entered foo"
Obviamente, esto no es legal ya que no existe else
. Una alternativa en la que he pensado:
nop :: IO ()
nop = sequence_ []
main2 = do s <- getLine
if s == "foo" then putStr "You entered foo" else nop
Esto es un poco detallado, pero me conformaría con ello si fuera necesario. Sin embargo, me sorprendería que no hubiera una versión incorporada de nop
.
Alternativamente:
doIf :: Bool -> IO () -> IO ()
doIf b m = if b then m else nop
main3 = do s <- getLine
doIf (s == "foo") (putStr "You entered foo")
Esto es más conciso, pero la sintaxis no es particularmente agradable. Una vez más, no me sorprendería encontrar algo integrado que ya exista.
¿Cuál es la forma preferida de hacer esto?