Tady je citace z článku “Do unchained”, co jsem už jednou posílal:
“we explore extending do notation with other imperative language features that can be added to simplify monadic code: local mutation, early return, and iteration. We present formal translation rules that compile these features back down to purely functional code”
Takže ten kód je čistě funkcionální, všechno, co je uvnitř “do” a vypadá imperativně, je jen syntaktický cukr.