Ответ 1
Ну, он в какой-то мере тесно связан с монадами, просто несовместим с классом типа Monad
. В частности, мы можем отметить следующие параллели:
-
Моноиды имеют ассоциативную операцию с идентификатором, определенным на значениях согласованного типа:
mappend :: a -> a -> a
иmempty :: a
. -
Монады имеют ассоциативную операцию с идентификатором, определенным на конструкторах типа, например:
join :: m (m a) -> m a
иreturn :: a -> m a
. -
Функции - действительно, стрелки в категории - имеют ассоциативную операцию и идентичность, но ассоциативная операция индексируется объектами категории, что здесь означает "типы":
(.) :: arr b c -> arr a b -> arr a c
иid :: arr a a
.
... так что же будет монада, чья join
индексируется по типам? Hm.
Несколько ссылок, которые вы можете найти интересными, исследуя связанные понятия:
- Окрестность Бесконечности: За пределами Монады
- через Lambda the Ultimate: Параметризированные понятия вычисления
- Comonad.Reader: Параметрированные монады в Haskell
- Олег: Переменная (тип) Состояние "Монада"
- через Lambda the Ultimate: Клейсли Стрелы изгоняющей удачи
post scriptum - Вы сказали это в комментарии к вопросу:
Ты прав. На самом деле я хочу исправить это, чтобы быть более похожим на монад, хотя, хотя я и не использую "монады". Я отредактирую его. Хотя у меня был бы более или менее тот же вопрос об применениях.
Собственно, ограничение вещей до Applicative
существенно меняет ситуацию! Разница между a -> Marked p b
и Marked p (a -> b)
заключается в том, что в первом свойства структуры Marked p
могут зависеть от параметра a
; тогда как в последнем маркировка не зависит от аргументов функции. Независимость означает, что эти две стороны могут рассматриваться отдельно, что значительно упрощает дело; отметив, что любое значение типа a
изоморфно функции типа () -> a
, вы можете превратить ее в какую-то двухуровневую версию Arrow
в простой форме.
С другой стороны, включение Monad
подразумевает некоторую степень чередования между функциями и контекстом маркировки, что усложняет вопросы по причинам, аналогичным тем, что обсуждаются в ответах на этот вопрос .