Ich möchte in Haskell etwas machen, das so aussieht:
main1 = do s <- getLine
if s == "foo" then putStr "You entered foo"
Offensichtlich ist dies nicht legal, da es keine gibt else
. Eine Alternative, an die ich gedacht habe:
nop :: IO ()
nop = sequence_ []
main2 = do s <- getLine
if s == "foo" then putStr "You entered foo" else nop
Dies ist ein wenig ausführlich, aber ich würde mich bei Bedarf damit zufrieden geben. Ich wäre überrascht, wenn es keine integrierte Version von gäbe nop
.
Alternative:
doIf :: Bool -> IO () -> IO ()
doIf b m = if b then m else nop
main3 = do s <- getLine
doIf (s == "foo") (putStr "You entered foo")
Dies ist prägnanter, aber die Syntax ist nicht besonders gut. Auch hier wäre ich nicht überrascht, etwas Eingebautes zu finden, das bereits vorhanden ist.
Was ist der bevorzugte Weg, um dies zu tun?