Шутка заключается в том, что мы используем сразу спектр моделей, а не одну. Так и тут - разумно, как Олег предлагает, не зацикливаться на монадах, а открывать спектр.
Так никто и не зацикливается. Я возражаю точке зрения, что монады и профункторы с сопряжениями не нужны, вредны и бесполезны. Вполне себе адекватные инструменты в ситуациях, когда надо по-быстрому структурировать код (не обязательно на haskell).
Главное, почитать об этом прикладников, типа Спивака или Коновалова, у которых очень хорошо описано зачем это всё надо, и какая за конструкциями инженерная интуиция. Нубские толкования монад (сопряжений), конечно, вносят больше неразберихи, чем помогают.
А инженерная интуиция есть. И мой опыт таков, что очень часто выручает. Особенно, в каких-нибудь мутных алгоритмах с бэктрекингом.
Это работает, как арифметика над структурами кода. Это ж хорошо, когда на бумажке с минимумом напряжений можно вычислить организацию программы.