18
我正努力用最好的方式報告一組函數中的錯誤,這些函數應該在我正在編寫的庫中很好地編寫。表達式和可組合的錯誤類型
具體而言,我有一個看起來像功能:
foo, bar, baz :: a -> Maybe a
其中foo
只能以一種方式(非常適合Maybe
)失敗,但bar
和baz
可以在每個兩種不同的方式失敗(良好擬合對於Either BarErrors
和Either BazErrors
)。
一種解決方案是創建:
data AllTheErrors = TheFooError
| BarOutOfBeer
| BarBurnedDown
| ...
,並讓所有的函數返回Either AllTheErrors
,這表示可能通過這些功能的組成的序列在表達爲代價提高誤差範圍每個個人功能可能的錯誤範圍。
有沒有一種方法可以同時獲得?也許除了一元組成以外的東西?或者與類型家庭(波浪手)...?
輝煌,謝謝! – jberryman
做了一些研究之後,我認爲適合我的庫的是在'failure'包中'Failure'類中多態地定義我的庫的函數,這裏是:http://hackage.haskell.org/package/failure。這讓我表達了可以在類型sig中引發的異常類型,併爲我的用戶提供了使用像'Maybe'這樣簡單的東西的選項,或者像control-monad-exception(它提供了一個實例)那樣更強大的選項。再次感謝。 – jberryman