回答編集履歴

1

追記

2017/02/15 00:47

投稿

ozwk
ozwk

スコア13521

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
- さて、fgを連続で適用するには
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
+ などいろいろあります