Человек то ли не понимает, что такое монады, то ли намеренно вводит публику в заблуждение. С теоретической точки зрения монады как раз и описывают машинный код (протаскивают состояние машины через цепочку инструкций). Их изначально в семантику для этого и ввели. Потому что с чисто функциональной точки зрения машинный код - это нонсенс, а денотационная семантика чисто функциональна. Вот эту проблему несоответствия и решили монадами/комонадами.
Абстракции не ломаются, просто одна монада трансформируется в другую.
На практике, с математической (логической) точки зрения, мы всегда работаем в монадах. Монады повсеместны там, где есть хотя бы переменные. Превращение колец в кольца многочленов - это тоже монады.
Самый ли это удобный способ выражения программ? Не знаю. Спорный вопрос. Вот в Lisp-ах мы всегда неявно живём в монаде списков, явно нигде монады не упоминаются, и это позволяет матрицы транспонировать через (apply map list M), и это круто.
Может, явный синтаксис для монад и не нужен, но знать про них и уметь с ними работать - навык полезный.
Протаскивают состояние машины через цепочку инструкций - это не монада. Операций bind и pure в явном виде там нет. Переопределить их и просто так запустить код в другой монаде не представляется возможным, за исключением компиляции из языка, где эти монады имеются. Да и сама компиляция будет не слишком тривиальна, если хочется получить эффективный код.