module type REPR = sig type t val none: t val a : t val a_nasal : t val e_opened : t val e_closed : t val schwa : t val eu : t val o : t val o_nasal : t val i : t val i_nasal : t val y : t val y_nasal : t val u : t val p : t val b : t val t : t val d : t val k : t val g : t val f : t val v : t val ch : t val j : t val s : t val z : t val m : t val n : t val l : t val r : t val semi_voyel_w : t val semi_voyel_y : t val muted : t -> t val diphtongue : t -> t -> t end module type T = sig type t val muted : t -> t val a : t val e : [`Closed | `Opened] -> t val eu : t val o : t val schwa : unit -> t (** This is an empty sound. It can be used to replace any element in a syllabus *) val none: t (** This is the voyel i like in "ici" When nazalized, the voyel become [in] like in "ainsi" *) val i : t (** This is the sound present with letter [ai]. It is the e like in "semaine". When nazalized, the voyel become [in] *) val voyel_ai : t (** This is the sound ou like in "ouvrier" When nazalized, the voyel does not change *) val voyel_u : t (** This is the sound u like in "unis" When nazalized, the voyel become [un] like in "brun" *) val voyel_y : t (** Create a diphtongue from a semi-voyel and a voyel *) val diphtongue: t -> t -> t val nasal: t -> t option val p: t val b: t val t: t val d: t val k: t val g: t val f: t val v: t val s: t val z: t val sz: t val ch: t val j: t val n: t val m: t val r: t val l: t val semi_voyel_w: t val semi_voyel_y: t val is_voyel : t -> bool val is_nasal : t -> bool val repr : (module REPR with type t = 'a) -> t -> 'a end