回答編集履歴
1
追記
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
> [本来の出力, おまけ] => 本来の出力
|
1
|
+
> [本来の出力, おまけ] => 本来の出力
|
2
2
|
|
3
3
|
「エラーがあるかもしれない」を表すモナドであれば
|
4
4
|
ここがある意味エラーハンドリングになります。
|
@@ -18,14 +18,32 @@
|
|
18
18
|
g : b -> E<c,e>
|
19
19
|
```
|
20
20
|
|
21
|
-
|
21
|
+
処理`f`,`g`を連続で適用するにはどうしたら良いでしょう?
|
22
|
+
|
23
|
+
それには、
|
22
24
|
`f`の結果`E<b,e>`を`g`の入力の型`b`に「うまく渡す」仕組みが必要になります。
|
23
25
|
("[本来の出力, おまけ] => 本来の出力" はこれのことを言っている)
|
24
26
|
|
25
27
|
この、「うまく渡す」は具体的にどうするかですが、
|
26
28
|
例えば、「`f`でエラーがあったら`g`を飛ばす」というように作ります。
|
29
|
+
ここで、「入力がエラーだったら何もせずエラーを返す、正常なら`g`を適用して返す」関数を`g'`とすれば
|
30
|
+
めでたく`f`と`g'`は「エラー処理」という文脈で繋げられます。
|
27
31
|
|
32
|
+
長々と書きましたが、質問文のリンク先は
|
33
|
+
複数の「普通の値」->「エラーがあるかもしれない値」という関数を
|
34
|
+
どうやって一つの「普通の値」->「エラーがあるかもしれない値」関数にまとめるかの話です。
|
28
35
|
|
29
36
|
|
37
|
+
参考:[鉄道指向プログラミング(翻訳)](https://github.com/yukitos/notes/blob/master/A_recipe_for_a_functional_app/How%20to%20design%20and%20code%20a%20complete%20program.md)
|
30
38
|
|
39
|
+
---
|
40
|
+
|
41
|
+
質問文のリンク先だと、モナドは副作用を扱うためのものと読めてしまいますが、
|
42
|
+
|
43
|
+
- 「値がないことがある」 (Maybe, Option)
|
31
|
-
|
44
|
+
- 「処理が失敗することがある」 (Either, Result)
|
45
|
+
- 「値が複数ある」 (List)
|
46
|
+
- 「副作用が起こる」 (IO)
|
47
|
+
- 「状態がある」 (State)
|
48
|
+
|
49
|
+
などいろいろあります
|