Module Melange_compiler_libs.Subst

type t;
let identity: t;
let add_type: Ident.t => Path.t => t => t;
let add_type_path: Path.t => Path.t => t => t;
let add_type_function: Path.t => params:list(Types.type_expr) => body:Types.type_expr => t => t;
let add_module: Ident.t => Path.t => t => t;
let add_module_path: Path.t => Path.t => t => t;
let add_modtype: Ident.t => Types.module_type => t => t;
let add_modtype_path: Path.t => Types.module_type => t => t;
let for_saving: t => t;
let reset_for_saving: unit => unit;
let change_locs: t => Location.t => t;
let module_path: t => Path.t => Path.t;
let type_path: t => Path.t => Path.t;
let modtype_path: t => Path.t => Path.t;
let type_expr: t => Types.type_expr => Types.type_expr;
let class_type: t => Types.class_type => Types.class_type;
let value_description: t => Types.value_description => Types.value_description;
let type_declaration: t => Types.type_declaration => Types.type_declaration;
let class_declaration: t => Types.class_declaration => Types.class_declaration;
type scoping =
  1. | Keep
  2. | Make_local
  3. | Rescope(int)
;
let signature: scoping => t => Types.signature => Types.signature;
let signature_item: scoping => t => Types.signature_item => Types.signature_item;
let compose: t => t => t;
module Lazy: { ... };