(** Transform the S into Z if the S is the opening consonant and there is no ending consonant before *) let process : 'a Sig.modifier = fun (type el) m init -> let module T = (val m:Sounds.T with type t = el) in let (((v1, v2), c) , ending) = init in match c with | None -> init | Some op -> (* The voyel may be none in case of ending word. In such case, we shall not trnasform the S into Z *) let is_voyel = T.is_voyel v1 && T.is_voyel v2 in match is_voyel, op.Sig.opening, op.Sig.ending with | true, hd::[], None when T.code hd = T.SZ -> let c = Some { op with opening = [T.z ()] } in (((v1, v2), c) , ending) | _ -> init