module Id : sig type 'a typeid (** The type created on-the-fly. *) val newtype : unit -> 'a typeid (** Create a new instance of a dynamic type *) type ('a, 'b) eq = Eq : ('a, 'a) eq val try_cast : 'a typeid -> 'b typeid -> ('a, 'b) eq option (** Compare two types using the Eq pattern *) end type transform = | E : { module_ : (module S.Analyzer with type Expression.t = 'a and type Instruction.t = 'b and type Location.t = 'c); expr_witness : 'a Id.typeid; instr_witness : 'b Id.typeid; location_witness : 'c Id.typeid; } -> transform module type App = sig val t : transform array end type result = R : { value : 'a; witness : 'a Id.typeid } -> result module Make (A : App) : sig include S.Analyzer with type Location.t = result array and type Instruction.t' = result array and type Expression.t' = result array end [@@warning "-67"]