type ex = | E : { module_ : (module S.Analyzer with type Expression.t = 'a and type Expression.t' = 'b and type Instruction.t = 'c and type Instruction.t' = 'd and type Location.t = 'e and type context = 'f); expr_witness : 'a Type.Id.t; expr' : 'b Type.Id.t; instr_witness : 'c Type.Id.t; instr' : 'd Type.Id.t; location_witness : 'e Type.Id.t; context : 'f Type.Id.t; } -> ex (** Type of check to apply *) let build : (module S.Analyzer with type Expression.t = _ and type Expression.t' = _ and type Instruction.t = _ and type Instruction.t' = _ and type Location.t = 'a and type context = _) -> 'a Type.Id.t * ex = fun module_ -> let expr_witness = Type.Id.make () and expr' = Type.Id.make () and instr_witness = Type.Id.make () and instr' = Type.Id.make () and location_witness = Type.Id.make () and context = Type.Id.make () in let t = E { module_; expr_witness; expr'; instr_witness; instr'; location_witness; context; } in (location_witness, t)