私が取り組んでいるライブラリでうまく構成する必要がある関数のセットのエラーを報告する最良の方法に苦労しています。 foo
は一方向のみ(Maybe
のために良いフィット)で失敗することができますが、bar
とbaz
は、2つの異なる方法で各(良いフィットを失敗する可能性があります表現可能で構成可能なエラータイプ
foo, bar, baz :: a -> Maybe a
:
具体的には、私は次のようになり機能を持っていますEither BarErrors
およびEither BazErrors
)。
一つの解決策は、作成することです:
data AllTheErrors = TheFooError
| BarOutOfBeer
| BarBurnedDown
| ...
と表現を犠牲にして、これらの機能の構成シーケンスによって発生する可能性があるエラーの範囲を表現している、すべての機能がEither AllTheErrors
を返す作りますそれぞれ個の可能なエラーの範囲機能。
両方の方法がありますか?多分モナドの構成以外の何かと?またはタイプの家族(波の手)...?
賢い、ありがとう! – jberryman
いくつかの研究をした後、私のライブラリに合っていると思うのは、ライブラリの関数を 'Failure'クラスの' failure 'パッケージ(http://hackage.haskell.org/package/failure)から多態的に定義することです。これは、タイプsigで発生することができる種類の例外を表現することができ、ユーザーには、「Maybe」のような単純なものや、制御モナド例外(インスタンスを提供する)のようなより堅牢なものを使用するオプションを与えます。再度、感謝します。 – jberryman