(** The Nasal modifier transform a voyel followed by N and a consonant into a nasal voyel. Does this min that nasal voyel are not a distinct element, but just a merge from two distinct elements ? *) 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 let ending = Option.bind ending (fun x -> x) in match ending with | None -> init | Some ending -> match T.is_nasal ending with | false -> init | true -> (* Remove the ending consonant, and transform the voyel into the nasal form *) ( ( (T.nasal v1, T.nasal v2) , c ) , None )