Ответ 1
Специального ключевого слова (do/for) нет, и поэтому нет прямого перевода во вложенную flatMap (desugaring), как в других языках.
Но монадическое понимание может быть реализовано с сопрограммами.
Из документации Arrow: https://arrow-kt.io/docs/patterns/monad_comprehensions/#comprehensions-over-coroutines
Понимание сопрограмм
Эта функция известна под несколькими именами: async/await, сопрограммы, do notation, для понимания... каждая версия содержит определенные уникальные моменты, но все они основаны на одних и тех же принципах. В Kotlin сопрограммы (введенные в версии 1.1 языка) делают компилятор способным переписывать, казалось бы, синхронный код в асинхронные последовательности. Arrow использует эту возможность компилятора, чтобы вывести нотацию, подобную сопрограммам, во все экземпляры класса типов Monad.
Это означает, что все варианты доступны для Option, Try, List, Reader, Observable, Flux или IO.
Для сопрограмм см. Также "Глубокое погружение в сопрограммы на JVM @KotlinConf 2017": https://www.slideshare.net/elizarov/deep-dive-into-coroutines-on-jvm-kotlinconf-2017?next_slideshow=1