Когда в Clojure следует использовать монаду вместо макроса и наоборот?

Существует слишком много руководств по монадам, в которых говорится... "Смотрите! Вот случай, когда мы можем использовать монаду" или "Этот для чего нужна монада». Что я хочу знать, так это какие шаги люди используют, чтобы прийти к заключению, которое они могут сказать себе: «Ого! Похоже, мы можем использовать здесь монаду!»

Итак, когда кто-то говорит мне... "(бла) не имеет ничего общего с монадой...", это на самом деле не помогает мне ответить на мои вопросы, а именно:

  • Как мне определить какие шаблоны в программах могут быть выражены с помощью монад?
  • Как я могу написать свою собственную настроенную монаду, если я определил потенциал их использования?

Я начал здесь очень длинный вопрос о монадах, если кто-то заинтересован, чтобы помочь - Map and Reduce Monad for Clojure... Что насчет Juxt Monad?.

Вернемся к этому вопросу:

Когда следует использовать монаду вместо макроса и наоборот?

  • Я читал статьи и смотрел презентации, в которых говорилось... "Монады используются для абстракции DSL".... но большинство библиотек Clojure DSL (например, hiccup и korma) используют defmacroи это прекрасно работает.

А зачем нам монады в Clojure, если у нас есть макросы?

26
задан customcommander 14 September 2019 в 19:47
поделиться