(* TEST * expect *) module Ext (X : sig type 'a t end) = struct type t = T : 'a X.t -> t end;; let foo (x : Ext(List).t) = match x with | T l -> let open Ext(Array) in T (Array.of_list l);; [%%expect {| module Ext : functor (X : sig type 'a t end) -> sig type t = T : 'a X.t -> t end val foo : Ext(List).t -> Ext(Array).t = |}]