sig
  module TEnv : ProglangUtils.OwnMap.S
  module Gen :
    sig
      exception NoLetAnnotation of string
      type result = { typevar : Inf.Vars.TVar.t; }
      type changed = {
        location : Inf.Type.phi;
        lenv : Inf.Vars.LEVar.t;
        tenv : TEnv.t;
      }
      val create_e :
        TEnv.t ->
        Inf.Vars.LEVar.t -> Syntax.e -> Gen.Gen.result * Gen.Gen.changed
      val create_s :
        TEnv.t ->
        Inf.Vars.LEVar.t ->
        Syntax.s -> Gen.Gen.result * Inf.Type.phi * Inf.Vars.LEVar.t
      val create_v : TEnv.t -> Inf.Vars.LEVar.t -> Syntax.v -> Gen.Gen.result
    end
end