せずに、私はこのようになりますHaskellの中に何かをしたい場合はIOは、あるいは: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")
が、構文は特に素敵ではありません。繰り返しになりますが、すでに存在するものを見つけることには驚かないでしょう。
これを行うにはどのような方法が良いですか?
おっと、私はreturn()について考えましたが、実際にそれが返されると考えていました(つまり、do式の残りの部分を短絡しています)。私の悪い。いつものポインタありがとう。 –
戻り値はそれほど悪い名前ですね: – bdonlan
@Daveハスケルでの 'return'は言語構造ではないことを覚えておいてください。これは単なる関数です(bdonianが言うように、悪名を選んだ)。戻り値は制御フローに影響しません。何かを書くことができます: 'do {s < - getLine; return(); putStrLn s} 'はうまく動作します。 –