Изначально в #haskell была boring и простая концепция:
- есть чистая логика (с щепоткой "чистых" монад вроде списков)
- есть грязные IO эффекты
Компилятор разруливает, что бы они не смешивались.
Чистое можно вызывать из чего угодно, грязное только из грязного.
Но в один из скучных дней, им на глаза попался java spring проект.
И узрели они, что можно смешивать логику и эффекты, закрывая их интерфейсами с DI и мокая реализацию в тестах.
И решили придумать тоже самое - только интерфейсы назвать алгебрами, а DI free-монадами (что бы повыпендриваться конечно).
Вот тогда все и полетело в пзду и монады расползлись по всем слоям приложения.
-- все это, как водится, бред хейтеров монад --