EN
PréludeChargé par défaut — aucun import nécessaire.

Mutation locale — l'effet Mut

Synopsis
effect Mut (s : Region) where

Noms nus sur le tableau mutable (length / swap / index / printLine)

length : Array a -> Nat

Le nombre d'éléments. PUR — la longueur d'un Array est FIXE à la création (aucune opération de redimensionnement n'existe), la lire n'exige donc pas Mut ; c'est ce qui permet d'écrire embed (length arr) - 1 en ligne dans une expression. Nat, le même type de compte que tous les autres length (les longueurs sont en Nat partout ; embed marque la frontière compte→arithmétique).

swap : Array a -> Int -> Int -> () with Mut

Échange les éléments i et j en place (panique hors bornes).

index : Array a -> Int -> a with Mut

Lecture indicée arr[i] — EFFECTUELLE (with Mut : la case peut changer sous vos pieds, la lire est une action), clé Int (un curseur hi := hi - 1 calcule en Int ; les conteneurs purs gardent leurs clés Nat). Panique hors bornes. Le parseur désucre arr[i] en index arr i ; ce candidat rend la forme légale sur le tableau mutable (audit F2, sens « Array OK »).

show : Show a => Array a -> String with Mut

Rend le contenu COURANT du tableau, [e1, e2, …] — EFFECTUEL (with Mut : il lit les cases vivantes), contrairement au show pur des valeurs immuables, qu'il surcharge par le type du conteneur.

printLine : Show a => Array a -> () with IO, Mut

Affiche le contenu COURANT du tableau puis un retour à la ligne — générique sur l'élément (Show a =>), comme printLine sur toute autre valeur affichable.

Boucles itératives (for / while)