saveStuff
特定のテストに合格した後、ファイルに何かを保存する関数を作成したいと思います。テストが失敗した場合、エラーを発生させる必要があります。この関数の結果タイプはどうあるべきですか?IO (Either String ())
とを思いついたのですが、どういうわけかIO (Maybe String)
どちらも違和感があります。標準ライブラリから同様の関数を検索しましたが、単に。を返すようですIO ()
。それらは失敗時に例外をスローします。私はそのアプローチが好きだとは思いません。
質問する
150 次
2 に答える
7
を返すものを書くことを検討できますErrorT String IO ()
。ErrorT
モナド変換子のドキュメントはHackageにあります。エリック・キッドによるエラーを報告するための優れた8つの方法と、数年後のエドワード・ヤンによるフォローアップには、さらに多くの提案があります。
于 2012-05-05T01:38:10.537 に答える
6
成功できる方法が1つしかない場合は、saveStuff
同型の型Maybe ErrorMessage
が正しい型です。それ自体には、通常使用時に失敗を示すMaybe ErrorMessage
という欠点があるため、ここでの期待に反することになります。それに関しては、より良いですが、ケースのパラメータには情報が含まれていないため、そのオプションにも優雅さが欠けています。Nothing
Maybe
Either ErrorMessage ()
()
Right
これらの欠点を受け入れたくない場合は、独自の結果タイプを定義してください
data Result = Success | Failure ErrorMessage
-- with type ErrorMessage = String, for example
于 2012-05-05T00:49:42.390 に答える