特定のテストに合格した後、ファイルに何かを保存する関数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. この関数はいつ何かを返すでしょう
- 2. クエリ結果はいつスカラーではないでしょうか?
- 3. のMySQL:SQLフィールドのちょうど3つの結果を返す
- 4. 多型結果型GADT関数
- 5. このjavascript関数の変数結果は何ですか
- 6. 関数内の関数でモジュールを呼び出すにはどうすればいいのでしょうか?
- 7. どのようにポインタを渡し、関数の結果を得ましたか?
- 8. mainの次の関数と配列の結果はどうなりますか?
- 9. どうすればonclick関数の結果を返す関数を得ることができますか?
- 10. 関数型言語のプログラムはスタックオーバーフローを起こしやすいでしょうか?
- 11. データテーブルのクラスとレコードがオブジェクトの場合、結合はどうでしょうか?
- 12. クローンarr3 ---->結果を変数に格納するarr6これが正しいのでしょうか?
- 13. 計算結果を出力しない、ちょうど0
- 14. この行{} + []の結果はどうなりますか?
- 15. MyBatisは空の結果セットをどう扱うのですか?
- 16. どのように私はアンドロイドの関数から結果を返すことができます
- 17. ネイティブJavaScript関数は「スーパーグローバル」なのでしょうか?
- 18. Kmodes(python)の結果配列の数字はどういう意味ですか?
- 19. オペレータオーバーロードの変数のデータ型とスコープはどのようにすべきでしょうか?
- 20. ハスケルでの母音のデータ型は可能でしょうか?
- 21. Androidのjavascriptインジェクション、どうすればこの関数を$(document).ready(function(){{}}と呼ぶでしょうか)
- 22. VB - この疑わしい練習のパフォーマンス結果はどうですか?
- 23. request-promise - 関数外のPromiseからどのように結果を得ることができますか?
- 24. パンダは、関数の結果
- 25. は、私のアルゴリズムは正しいのでしょうか?ここ
- 26. 関数の結果
- 27. JavaScriptの数値ゲームは私の推測とはどういうことでしょうか?
- 28. MS SQL Serverのテーブル関数の結果と結合するにはどうすればよいですか?
- 29. のF# - 結果の型は、ここで無限のエラー
- 30. elasticsearchあいまい検索、ちょうど10結果
成功することができれば、「多分ErrorMessage」か同型のものが正しいタイプです。通常は 'Nothing'が失敗を示しているので、' Maybe'が気に入らなければ 'data Result = Success |失敗文字列 '。 –
@DanielFischer:これはおそらく答え(コメントではない)としては良いでしょう。 –