do-notation
Açúcar sintático do Haskell para encadear chamadas de bind. Faz código monádico parecer imperativo. do { x <- getName; y <- getAge; return (x, y) } equivale a getName >>= \x -> getAge >>= \y -> return (x, y).
Equivalentes modernos: async/await do JavaScript (do-notation para a mônada Promise), o ? do Rust (a versão para as mônadas Result/Option) e asyncio.run do Python (espírito parecido). O Scala tem a for-comprehension. Casos de uso: encadear ações de IO, tratamento de erros, list comprehensions. Modelo mental: a do-notation torna o código monádico legível para humanos sem forçar um raciocínio imperativo. A força do Haskell: a mesma sintaxe funciona para QUALQUER mônada (IO, Maybe, Either, State, Reader, Writer, as suas próprias). Em Python e JS, o async/await é um caso especial para uma mônada específica.