Ищем примеры структур, которые применяют некоторые, но не все свойства Монады - PullRequest
0 голосов
/ 13 июля 2020

Топи 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 которого возвращает конкатенацию небольших списков в обратном порядке. Я надеюсь, что это дает лучшее направление примеров, необходимое, чтобы помочь мне прояснить мою путаницу.

1 Ответ

1 голос
/ 13 июля 2020

Говоря терминологией Java: монада = a flatMap+unit interface + a monad-l aws contract.

Вы всегда можете избавиться от законов / контракт, но тогда у вас останется только интерфейс без каких-либо гарантий - а в случае монады это очень важно, потому что контракт в основном позволяет вам комбинировать функции A => F[B], как если бы они были числами (порядок скобок не имеет значения, есть 0, что не влияет на результат). Уберите любой из l aws, и вдруг аналогия развалится. (Вроде как интерфейс Cloneable в Java, где реализация выдает NotImplementedException - это реализация интерфейса, но она бесполезна). По этой причине никто не стал бы называть их алгебрами, и интерфейс - лучшее название, которого они заслуживают.

Try и Future как такие реализации - у них есть карты и плоские карты, но это не так. t считается законным. Они полезны? Да. Сможете ли вы реорганизовать их безмозглым образом, как с любой монадой? Нет, потому что вы можете изменить поведение. В Cats такие реализации, скорее всего, попали бы в библиотеку alleycats.

Если вы ищете менее мощные алгебры (но все же алгебры!), Чем монада, есть функторы или аппликативные функторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...