teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2017/02/15 00:47

投稿

ozwk
ozwk

スコア13553

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
- さて、fgを連続で適用するには
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
- 参考:[鉄道指向プログラミング(翻訳)](https://github.com/yukitos/notes/blob/master/A_recipe_for_a_functional_app/How%20to%20design%20and%20code%20a%20complete%20program.md)
44
+ - 「処理が失敗することがある」 (Either, Result)
45
+ - 「値が複数ある」 (List)
46
+ - 「副作用が起こる」 (IO)
47
+ - 「状態がある」 (State)
48
+
49
+ などいろいろあります