module type Extensible = sig type t type 'a constructor val create : unit -> 'a constructor val inject : 'a constructor -> 'a -> t val matches : t -> 'a constructor -> ('a -> 'b) -> (t -> 'b) -> 'b (* val outo : 'a constructor -> t -> 'a option val oute : 'a constructor -> t -> 'a val is : 'a constructor -> t -> bool *) end;; module Make (X : sig end) : Extensible