(* la structure d'anneau *) module type ANNEAU = sig type t (* type des éléments de l'anneau *) val zéro : t val unité : t val plus : t -> t -> t val mult : t -> t -> t val equal : t -> t -> bool val print : t -> unit end ;; (* la structure d'anneau sur des valeurs de type t *) module type POLYNOME = sig type c (* type des coefficients *) type t (* type des polynômes *) val zéro : t val unité : t (* unité pour le produit des polymôme. Superflue, car c'est un cas particulier de monôme, mais cela permet à la structure de polynôme d'être une superstructure de celles des anneaux *) val monôme : c -> int -> t (* monôme a k retourne le monôme a X^k *) val plus : t -> t -> t val mult : t -> t -> t val equal : t -> t -> bool val print : t -> unit val eval : t -> c -> c end ;; (* Le fonction qui étant donné une structure d'anneau retourne une structure de polynôme. Il faut faire attention à réexporter le types des coefficients de façon partiellement abstraite afin que les opérations sur les coefficients des polynômes puissent être manipulés de l'extérieur *) module Make (A : ANNEAU) : (POLYNOME with type c = A.t) ;;