effect Mut (s : Region) where
import nécessaire.Mutation locale — l'effet Mut
Synopsis
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.