Na HaskellWiki jest informacja że Monada to type clasa która ma następujące metody (czy można tu w ogóle używać słowa metody?)
class Monad m where
(>>=) :: m a -> ( a -> m b) -> m b
(>>) :: m a -> m b -> m b
return :: a -> m a
fail :: String -> m a
Jednak w innym artykule jest informacja że funkcja/metoda fail
jest pogardzana
Fail is referring to the "fail" function, which is part of the Monad typeclass and is almost universally despised.
Dodatkowo na hackage.haskell.org można zobaczyć że funkcja fail
nie jest już częścią Monady i została przeniesiona do type class MonadFail
Po tym przydługim wstępie mam trzy pytania do znawców Haskella:
- Dlaczego funkcja
fail
była pogardzana? - Czy jeśli funkcja
fail
jest w osobnej type classieMonadFail
to dalej jest pogardzana? - Jeśli dalej jest pogardzana to jak Monada powinna zgłaszać błędy? Niby artykuł daje odpowiedź że powinienem użyć
Control.Failure
, ale nie widzę w czym to jest lepsze odMonadFail
Z góry dziękuję za odpowiedzi
P.S. Teraz widzę że failure jest deprecated. Czyli zamiast Failure powinienem użyć MonadThrow