Топи c того, что является монадой, широко освещалось в нескольких вопросах stackoverflow, а также в других формах. Тем не менее, мне редко удается найти примеры того, что такое ложная монада (я не знаю, существует ли для этого термин, я как бы придумал это слово). Под ложной монадой я подразумеваю, что она выполняет одно или несколько свойств монад, но НЕ выполняет все свойства.
Насколько я понимаю, свойства монад можно резюмировать следующим образом:
// 1. Monad(foo).flatMap(f) == f(foo)
// 2. Monad(bar).flatMap(f => f(bar)) == Monad(bar)
// 3. Monad(baz).flatMap(f).flatMap(g) == Monad(baz).flatMap(x => f(x).flatMap(g))
Я ищу примеры структур, которые не являются монадами. В идеале, примеры Монад, которые применяют некоторые, но не все l aws для Монад. Также приветствуются дальнейшие чтения.
Обновление: Моя цель - не проводить открытое обсуждение того, чем не является Монада. Это скорее примеры кода в Scala для структур, которые применяют некоторые, но не все Monad l aws.
Если это помогает, я нашел пример, упомянутый в этой статье на Monads, в котором говорится, что не-монада может быть списком, реализация FlatMap которого возвращает конкатенацию небольших списков в обратном порядке. Я надеюсь, что это дает лучшее направление примеров, необходимое, чтобы помочь мне прояснить мою путаницу.