特定のテストに合格した後、ファイルに何かを保存する関数saveStuff
を書きたいと思います。テストが失敗した場合は、エラーを発生させる必要があります。この関数の結果の型はどうでしょうか?私はIO (Either String())
とIO (Maybe String)
と考えましたが、どちらもと感じるのは何らかの理由でです。私は標準ライブラリから同様の機能を探しましたが、単にIO()
を返すようです。彼らは失敗時に例外を投げます。私はそのアプローチが好きであるとは思っていません。この関数の結果の型はどうでしょうか?
5
A
答えて
7
を定義します。 ErrorT
モナドトランスのドキュメントはon Hackageです。数年後にEdward YangによってEric Kiddとfollow upによって優れたEight Ways to Report Errorsにさらに提案があります。
+0
'ErrorT'も私が考えたものです。あなたは本質的に 'IO()'を持っており、エラーの可能性をメッセージに追加したいので、 'ErrorT'トランスをその上に置いてください。 –
6
saveStuff
が成功できる唯一の方法がある場合は、Maybe ErrorMessage
と同型のタイプが正しいタイプです。 Maybe ErrorMessage
自体には、Maybe
を使用したときに通常Nothing
が失敗を示すという欠点があります。そのため、ここでは期待に反するでしょう。それに関しては、Either ErrorMessage()
が良いですが、の場合は()
のパラメータには情報が含まれていないため、そのオプションもエレガントではありません。あなたはこれらの欠点を受け入れたくない場合は
、あなたがErrorT String IO()
返す何かを書いて検討することもでき、独自の結果の型
data Result = Success | Failure ErrorMessage
-- with type ErrorMessage = String, for example
関連する問題
- 1. このjavascript関数の変数結果は何ですか
- 2. どのようにポインタを渡し、関数の結果を得ましたか?
- 3. 関数型言語のプログラムはスタックオーバーフローを起こしやすいでしょうか?
- 4. クローンarr3 ---->結果を変数に格納するarr6これが正しいのでしょうか?
- 5. 関数の結果
- 6. データテーブルのクラスとレコードがオブジェクトの場合、結合はどうでしょうか?
- 7. MyBatisは空の結果セットをどう扱うのですか?
- 8. ネイティブJavaScript関数は「スーパーグローバル」なのでしょうか?
- 9. VB - この疑わしい練習のパフォーマンス結果はどうですか?
- 10. Androidのjavascriptインジェクション、どうすればこの関数を$(document).ready(function(){{}}と呼ぶでしょうか)
- 11. ハスケルでの母音のデータ型は可能でしょうか?
- 12. sqlite3の結果セットで複数のことを行う
- 13. javascript/jquery関数の数を増やすにはどうすればよいでしょうか?
- 14. 整数型の分割 - 結果は予測可能ですか?
- 15. jQueryは関数型プログラミングとどのように関係していますか?
- 16. 関数の結果を変数に設定しようとしています
- 17. Cでのゲームプログラミング、どこから始めましょうか?
- 18. HQLのカウント関数はnullの結果を引き起こしますか?
- 19. PHPの `preg_match_all`関数のためのBoost :: regexp analogは何でしょうか?
- 20. マップ関数の結果としてサンクメモリーリーク
- 21. .swfをフックしてPythonでその関数を呼び出すことは可能でしょうか?もしそうなら、どうですか?
- 22. どのようにして1つのメイト関数がソリューションに収束するのでしょうか?
- 23. どのようにコールバック関数の結果の初期ルートは、反応ネイティブで決定されますか?
- 24. これはバグでしょうか?
- 25. TCLでこれがどのように機能するのでしょうか?
- 26. 関数の結果をループするときにforeachはどのように機能しますか?
- 27. nodejs(nowjs)のhgetall()の結果をどのように扱うか?
- 28. Doctrine2の関連エンティティ結果をどのように制限できますか?
- 29. コンポジットパターンは、ちょうどアレイに私をもたらすのでしょうか?
- 30. 2つのmysqlクエリー、同じ結果:もう一方の方が良いでしょうか?
成功することができれば、「多分ErrorMessage」か同型のものが正しいタイプです。通常は 'Nothing'が失敗を示しているので、' Maybe'が気に入らなければ 'data Result = Success |失敗文字列 '。 –
@DanielFischer:これはおそらく答え(コメントではない)としては良いでしょう。 –