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