Mutabilita je ve funkcionálním jazyce cesta do pekel, nicméně jde to i čistě funkcionálně, viz zde: http://leanprover.github.io/talks/NFM2022.pdf (slajdy s titulkem "Local Imperative Programming") — "Lean 4 is still a purely functional language." Vypadá to skoro jako černá magie.
Příklad:
def main : IO Unit := do let mut x := 1 repeat do IO.println s!"{x}" x := x + 1 unless x <= 10 do break
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.
Tady je trochu lépe vidět to "do unchained": https://www.root.cz/clanky/prace-s-nekonecnymi-sekvencemi-v-knihovne-funcy/nazory/1126269/