Tôi muốn làm một cái gì đó trong Haskell trông như thế này:
main1 = do s <- getLine
if s == "foo" then putStr "You entered foo"
Rõ ràng điều này không hợp pháp vì không có else
. Một giải pháp thay thế tôi đã nghĩ đến:
nop :: IO ()
nop = sequence_ []
main2 = do s <- getLine
if s == "foo" then putStr "You entered foo" else nop
Điều này hơi dài dòng, nhưng tôi sẽ giải quyết nếu cần. Tuy nhiên, tôi sẽ rất ngạc nhiên nếu không có phiên bản tích hợp sẵn nop
.
Ngoài ra:
doIf :: Bool -> IO () -> IO ()
doIf b m = if b then m else nop
main3 = do s <- getLine
doIf (s == "foo") (putStr "You entered foo")
Điều này ngắn gọn hơn, nhưng cú pháp không đặc biệt đẹp. Một lần nữa, tôi sẽ không ngạc nhiên khi tìm thấy thứ gì đó tích hợp sẵn đã tồn tại.
Cách ưa thích để làm điều này là gì?