sig
  type 'v var = Local of int | NonLocal of 'v
  type 'v env
  exception KindError of (Buffer.t -> unit -> unit)
  val implication_only_on_arrow : 'KindCheck.env -> 'a
  val empty : Module.name -> 'KindCheck.env
  val module_name : 'KindCheck.env -> Module.name
  val location : 'KindCheck.env -> SurfaceSyntax.location
  val find_variable :
    'KindCheck.env ->
    Variable.name SurfaceSyntax.maybe_qualified -> 'KindCheck.var
  val find_kind :
    'KindCheck.env ->
    Variable.name SurfaceSyntax.maybe_qualified -> Kind.kind
  val find_nonlocal_variable : 'KindCheck.env -> Variable.name -> 'v
  val resolve_datacon :
    'KindCheck.env ->
    SurfaceSyntax.datacon_reference ->
    'KindCheck.var * Datacon.name * DataTypeFlavor.flavor
  val get_exports : 'KindCheck.env -> (Variable.name * 'v) list
  val locate : 'KindCheck.env -> SurfaceSyntax.location -> 'KindCheck.env
  val enter_module : 'KindCheck.env -> Module.name -> 'KindCheck.env
  val extend :
    'KindCheck.env -> SurfaceSyntax.type_binding list -> 'KindCheck.env
  val bind_nonlocal :
    'KindCheck.env -> Variable.name * Kind.kind * '-> 'KindCheck.env
  val dissolve : 'KindCheck.env -> Module.name -> 'KindCheck.env
  val bindings_data_group_types :
    SurfaceSyntax.data_type_def list -> SurfaceSyntax.type_binding list
  val bind_data_group_datacons :
    'KindCheck.env -> SurfaceSyntax.data_type_def list -> 'KindCheck.env
  val bind_nonlocal_datacon :
    'KindCheck.env ->
    Datacon.name -> SurfaceSyntax.datacon_info -> '-> 'KindCheck.env
  val bind_external_name :
    'KindCheck.env ->
    Module.name -> Variable.name -> Kind.kind -> '-> 'KindCheck.env
  val bind_external_datacon :
    'KindCheck.env ->
    Module.name ->
    Datacon.name -> SurfaceSyntax.datacon_info -> '-> 'KindCheck.env
  val bv : SurfaceSyntax.pattern -> SurfaceSyntax.type_binding list
  val names : SurfaceSyntax.typ -> SurfaceSyntax.type_binding list
  val infer_reset : 'KindCheck.env -> SurfaceSyntax.typ -> Kind.kind
  val check_implementation :
    'KindCheck.env -> SurfaceSyntax.implementation -> unit
  val check_interface : 'KindCheck.env -> SurfaceSyntax.interface -> unit
  val p : Buffer.t -> 'KindCheck.env -> unit
end