EConstr.ExpandA variant of EConstr.t where evar substitution is performed on the fly. The handle type below is a kind of substitution that is needed to make sense of the delayed term. Such representation is more efficient than EConstr.t when iterating over a whole term.
Caveat: the kind function below only returns the expanded head of the term. This means that when it returns Evar (evk, inst), evk is guaranteed to be undefined in the evar map but inst is, in general, not the same as you would get after expansion. You must call expand_instance before performing any operation on it.
type kind = (t, t, ESorts.t, EInstance.t, ERelevance.t) Constr.kind_of_termval make : Evd.econstr -> handle * tval repr : Evd.evar_map -> handle -> t -> Evd.econstrval kind : Evd.evar_map -> handle -> t -> handle * kindval expand_instance : skip:bool -> Evd.undefined Evd.evar_info -> handle -> t SList.t -> t SList.tval iter : Evd.evar_map -> (handle -> t -> unit) -> handle -> kind -> unitval iter_with_binders : Evd.evar_map -> ('a -> 'a) -> ('a -> handle -> t -> unit) -> 'a -> handle -> kind -> unit