Cześć, uzbierało mi się kilka pytań odnośnie Haskella
Niby wszystko mi mówi że funkcja error
jest zła, ale jest jednak dość często używana w Prelude
np dla list [0, 1, 2, 3] !! -1
. Kiedy można użyć funkcji error
?
Przy założeniu że jednak używamy Either
zamiast error
to czasem to Either
musimy złożyć z jakąś inną monadą. Co jest wtedy lepsze Control.Monad.Trans.Except transformers
z czy Control.Monad.Except? mtl
Mi bardziej podoba się Control.Monad.Trans.Except
, ale Relude
domyślnie eksportuje Control.Monad.Except
mtl
zawiera monadę MonadError
. W jaki sposób jest ona lepsza od MonadFail? A przy założeniu że nie używam własnych errorów tylko i wyłącznie opisy błędów zawsze typu Text
?
I jeszcze ostateczne pytanie. Co lepsze MonadError
czy ExceptT
? Warto brudzić sobie swoją monadę błędami "dziedzicząc" po MonadError
? Czy lepiej mieć dwie osobne monady (swoją monadę i ExceptT
) ?
Z góry dziękuję za wszystkie odpowiedzi