回答編集履歴
1
追記
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
> [本来の出力, おまけ] => 本来の出力
|
1
|
+
> [本来の出力, おまけ] => 本来の出力
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -38,7 +38,11 @@
|
|
38
38
|
|
39
39
|
|
40
40
|
|
41
|
-
|
41
|
+
処理`f`,`g`を連続で適用するにはどうしたら良いでしょう?
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
それには、
|
42
46
|
|
43
47
|
`f`の結果`E<b,e>`を`g`の入力の型`b`に「うまく渡す」仕組みが必要になります。
|
44
48
|
|
@@ -50,12 +54,44 @@
|
|
50
54
|
|
51
55
|
例えば、「`f`でエラーがあったら`g`を飛ばす」というように作ります。
|
52
56
|
|
57
|
+
ここで、「入力がエラーだったら何もせずエラーを返す、正常なら`g`を適用して返す」関数を`g'`とすれば
|
58
|
+
|
59
|
+
めでたく`f`と`g'`は「エラー処理」という文脈で繋げられます。
|
53
60
|
|
54
61
|
|
55
62
|
|
63
|
+
長々と書きましたが、質問文のリンク先は
|
64
|
+
|
65
|
+
複数の「普通の値」->「エラーがあるかもしれない値」という関数を
|
66
|
+
|
67
|
+
どうやって一つの「普通の値」->「エラーがあるかもしれない値」関数にまとめるかの話です。
|
56
68
|
|
57
69
|
|
58
70
|
|
59
71
|
|
60
72
|
|
61
73
|
参考:[鉄道指向プログラミング(翻訳)](https://github.com/yukitos/notes/blob/master/A_recipe_for_a_functional_app/How%20to%20design%20and%20code%20a%20complete%20program.md)
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
---
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
質問文のリンク先だと、モナドは副作用を扱うためのものと読めてしまいますが、
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
- 「値がないことがある」 (Maybe, Option)
|
86
|
+
|
87
|
+
- 「処理が失敗することがある」 (Either, Result)
|
88
|
+
|
89
|
+
- 「値が複数ある」 (List)
|
90
|
+
|
91
|
+
- 「副作用が起こる」 (IO)
|
92
|
+
|
93
|
+
- 「状態がある」 (State)
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
などいろいろあります
|