Я хочу зробити щось у 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")
Це більш стисло, але синтаксис не особливо приємний. Знову ж таки, я не здивувався б, знайшовши щось вбудоване, що вже існує.
Який найкращий спосіб це зробити?