Соответствующее использование Monad `fail` по сравнению с MonadPlus` mzero`

Это вопрос, который несколько раз возникал у меня при разработке кода, особенно в библиотеках. Кажется, это некоторый интерес , поэтому я подумал, что это может стать хорошей вики для сообщества.

Метод fail в Monad некоторыми рассматривается как бородавка; несколько произвольное дополнение к этому классу, не связанное с исходной теорией категорий.

Какие экземпляры монад, если таковые имеются, имеют естественный метод fail , но не могут быть экземплярами MonadPlus, потому что у них нет логической реализации для mplus ?

Но я больше всего интересует дискуссия на эту тему. Спасибо!


РЕДАКТИРОВАТЬ : Одна последняя мысль пришла мне в голову. Недавно я узнал (хотя это прямо там в документации для fail ), что монадическая нотация «do» обессахаривается таким образом, что сбои сопоставления с образцом, как в (x: xs) вызывает монаду fail .

Похоже, что на разработчиков языка сильно повлияла перспектива некоторой автоматической обработки сбоев, встроенной в синтаксис haskell, при включении fail в Monad.

20
задан Community 23 May 2017 в 12:34
поделиться