open Poly module Make2 (A : ANNEAU) (X : VAR) (Y : VAR) = struct module PX = Make (A) (X) module PXY = Make (PX) (Y) (* il faut cacher les composantes incompatibles c, monome et eval, mais maintenir la transparence du type t *) include (PXY : ANNEAU with type t = PXY.t) type c = A.t let monome k x y = PXY.monome (PX.monome k x) y let eval (p : PXY.t) (x : A.t) (y : A.t) : A.t = PX.eval (PXY.eval p (PX.monome y 0)) x end;;