(** Définir une monade permettant de compter combien de fois un opérateur spécial [tick] est utilisé. Appliquer la transformation correspondante au code suivant, qui permet de compter le nombre de comparaisons effectuées lors de l'insertion d'un élément dans une liste. *) let rec insert x l = match l with | [] -> [x] | h::t -> if tick(x < h) then x :: l else h :: insert x t (** Définir une monade décrivant des calculs non-déterministes. On calculera la liste des issues possibles, le type α mon sera donc α list Utiliser la monade pour générer l'ensemble des permutations d'une liste. *)