Всем привет. Наверняка этот вопрос сто раз обсуждался и всем известны все мнения и аргументы, но тем не менее, чтобы освежить и расставить точки над ё... Вот мы пишем на функциональном языке. Программы на нём - композиции функций. Функции чистые, от этого всё добро ФП, но мы живём в реальном мире и программам надо с ним взаимодействовать. Что, очевидно, чистыми функциями не организуешь. Люди, пишушие на других языках, сильно запарились этим противоречием и придумали IO монаду, типа, давайте писать чистые функции, которые описываю грязные взаимодействия, а потом в одном-единственном месте проинтерпретируем это описание. В clojure мире почему-то никто на этот счёт не парится, не пишут десяток конкурирующих реализаций этого правильного IO, не ведут дебаты. Вместо всего этого есть рекомендация "ну, постарайтесь не размазывать грязь по всему проекту, держите эти места на виду и в минимальном количестве". Собственно, вопрос - если так можно, зачем скалисты/хаскеллисты городят весь этот огород? Это ограничение clojure (нет типов - не сделаешь правильную монаду) или преимущество (не усложняем там, где не надо)?