質問: モナドについて教えてほしいことがあります。 以下のサイトが一番しっくりきました。 https://www.google.co.jp/amp/s/ubiteku.oinker.me/2016/01/20/%25E9%2596%25A2%25E6%2595%25B0%25E5%259E%258B%25E3%2581%25A4%25E3%2581%25BE%25E3%2581%25BF%25E9%25A3%259F%25E3%2581%2584-%25E3%2583%25A2%25E3%2583%258A%25E3%2583%2589%25E3%2581%258C%25E9%259B%25A3%25E3%2581%2597%25E3%2581%2584%25E3%2581%25A8%25E6%2580%259D%25E3%2582%258F%25E3%2582%258C%25E3%2581%25A6%25E3%2581%2584%25E3%2582%258B/amp/ 簡単にまとめると --- 関数型プログラミングでは、関数に副作用を持たせてはならない。 常に同じ入力には同じ出力を返す。 ただ、処理中にエラーが発生したりするので常に同じ出力は難しい。 なので以下の様な概念で関数を作る。 ※おまけは副作用の情報 本来の出力をおまけ付きに変換してくれる仕組み: 出力値 => [本来の出力, おまけ] おまけ付きの値を、そのままおまけ無しの値として関数に渡せる仕組み: [本来の出力, おまけ] => 本来の出力 --- すごく分かりやすかったんですが、この説明だとおまけを最終的に意識してないように思います。 おまけを見てエラー処理などもしないといけないと思うのですが、モナドではエラー処理をしないのでしょうか? (そんなことないと思うのですが、分かる方いましたら教えて下さい。)
回答: 値 => [本来の出力, おまけ] おまけをつけるのは処理内でなので、 エラーハンドリングするとしたら、値のエラーチェックになるはず。 値が正しく、正常な処理が行われれば、常に正しいおまけが生成されるはず。 なので、異常なおまけを生み出す原因となる値をチェックして除外したり、エラーにすればよい。 [本来の出力, おまけ] => 本来の出力 本来の出力だけにすればよく、そのためにおまけを取り除けばよいので、取り除き方が問題なければ、そもそもエラーは考えなくてよいはず(値の変換時に正しいチェックが為されていれば、異常なおまけになることはない)