Проблема с ними в том, что асинхронный стиль тогда отличается от последовательного, что само по себе не очень. С эффектами, кстати, окамлевыми, такой проблемы нет.
А какие отличия? Кроме того что ты пишешь let* вместо let Это явно гораздо лучше, чем лямбды в >>= заворачивать Для этого и вводили спец расширение в языке, что бы по минимому было изменений
До этого были сторонние ppx расширения языка, но их сложновато было делать авторам либ А теперь просто пишешь пару функций в либке с нужной сигнатурой и компилятор их понимает Похожий подход в f# с его билдерами
Вот именно это требование писать let* и сосёт. Конечно, лучше, чем явно заставлять писать >>=, но до возможности писать тот же код, как если бы писал последовательный код, ещё одного шага не хватает. И этот шаг сделали эффекты.