Haskellで次のようなことをしたい:
main1 = do s <- getLine
if s == "foo" then putStr "You entered foo"
がないので、明らかにこれは合法ではありませんelse
。私が考えた1つの選択肢:
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")
これはより簡潔ですが、構文は特に優れていません。繰り返しになりますが、すでに存在する組み込みのものを見つけても驚かないでしょう。
これを行うための好ましい方法は何ですか?