Это вопрос, который несколько раз возникал у меня при разработке кода, особенно в библиотеках. Кажется, это некоторый интерес , поэтому я подумал, что это может стать хорошей вики для сообщества.
Метод fail
в Monad некоторыми рассматривается как бородавка; несколько произвольное дополнение к этому классу, не связанное с исходной теорией категорий.
Какие экземпляры монад, если таковые имеются, имеют естественный метод fail
, но не могут быть экземплярами MonadPlus, потому что у них нет логической реализации для mplus
?
Но я больше всего интересует дискуссия на эту тему. Спасибо!
РЕДАКТИРОВАТЬ : Одна последняя мысль пришла мне в голову. Недавно я узнал (хотя это прямо там в документации для fail
), что монадическая нотация «do» обессахаривается таким образом, что сбои сопоставления с образцом, как в (x: xs) вызывает монаду
fail
.
Похоже, что на разработчиков языка сильно повлияла перспектива некоторой автоматической обработки сбоев, встроенной в синтаксис haskell, при включении fail
в Monad.