Module Mlsem_types.TVOp

val vars : Ty.t -> Mlsem_types__.Tvar.MVarSet.t
val vars' : Ty.t list -> Mlsem_types__.Tvar.MVarSet.t
val top_vars : Ty.t -> Mlsem_types__.Tvar.MVarSet.t
val strict_vars : Ty.t -> Mlsem_types__.Tvar.MVarSet.t
val vars_of_kind : kind -> Ty.t -> Mlsem_types__.Tvar.MVarSet.t
val polarity1 : TVar.t -> Ty.t -> [ `Both | `Neg | `Pos | `None ]
val polarity2 : RVar.t -> Ty.t -> [ `Both | `Neg | `Pos | `None ]
val polarity1' : TVar.t -> Ty.t list -> [ `Both | `Neg | `Pos | `None ]
val polarity2' : RVar.t -> Ty.t list -> [ `Both | `Neg | `Pos | `None ]
val vars_with_polarity1 : Ty.t -> (TVar.t * [ `Both | `Neg | `Pos ]) list
val vars_with_polarity2 : Ty.t -> (RVar.t * [ `Both | `Neg | `Pos ]) list
val vars_with_polarity1' : Ty.t list -> (TVar.t * [ `Both | `Neg | `Pos ]) list
val vars_with_polarity2' : Ty.t list -> (RVar.t * [ `Both | `Neg | `Pos ]) list
val is_ground_typ : Ty.t -> bool
val refresh : kind:kind -> Mlsem_types__.Tvar.MVarSet.t -> Mlsem_types__.Tvar.Subst.t
val shorten_names : Mlsem_types__.Tvar.MVarSet.t -> Mlsem_types__.Tvar.Subst.t
val pp_typ_short : Stdlib.Format.formatter -> Ty.t -> unit
val pp_typ_subst : Mlsem_types__.Tvar.Subst.t -> Stdlib.Format.formatter -> Ty.t -> unit
val clean : pos1:Ty.t -> neg1:Ty.t -> pos2:Mlsem_types__.Tvar.Row.t -> neg2:Mlsem_types__.Tvar.Row.t -> Mlsem_types__.Tvar.MVarSet.t -> Ty.t -> Ty.t

clean p n mono t substitutes in t all variables not in mono and only occurring positively by p, and all variables not in mono and only occurring negatively by n

val clean_subst : pos1:Ty.t -> neg1:Ty.t -> pos2:Mlsem_types__.Tvar.Row.t -> neg2:Mlsem_types__.Tvar.Row.t -> Mlsem_types__.Tvar.MVarSet.t -> Ty.t -> Mlsem_types__.Tvar.Subst.t
val clean' : pos1:Ty.t -> neg1:Ty.t -> pos2:Mlsem_types__.Tvar.Row.t -> neg2:Mlsem_types__.Tvar.Row.t -> Mlsem_types__.Tvar.MVarSet.t -> Ty.t list -> Ty.t list
val clean_subst' : pos1:Ty.t -> neg1:Ty.t -> pos2:Mlsem_types__.Tvar.Row.t -> neg2:Mlsem_types__.Tvar.Row.t -> Mlsem_types__.Tvar.MVarSet.t -> Ty.t list -> Mlsem_types__.Tvar.Subst.t
val bot_instance : Mlsem_types__.Tvar.MVarSet.t -> Ty.t -> Ty.t
val top_instance : Mlsem_types__.Tvar.MVarSet.t -> Ty.t -> Ty.t
val tallying : Mlsem_types__.Tvar.MVarSet.t -> (Ty.t * Ty.t) list -> Mlsem_types__.Tvar.Subst.t list
val decompose : Mlsem_types__.Tvar.MVarSet.t -> Mlsem_types__.Tvar.Subst.t -> Mlsem_types__.Tvar.Subst.t -> Mlsem_types__.Tvar.Subst.t list
val factorize : (TVarSet.t * TVarSet.t) -> Ty.t -> Ty.t * Ty.t

Operations on row and field variables

type field_ctx
val get_field_ctx : RVarSet.t -> Ty.t list -> field_ctx
val decorrelate_fields : field_ctx -> Ty.t -> Ty.t
val recombine_fields : field_ctx -> Ty.t -> Ty.t
val recombine_fields' : field_ctx -> Mlsem_types__.Tvar.Subst.t -> Mlsem_types__.Tvar.Subst.t
val fvars_associated_with : field_ctx -> RVar.t -> RVarSet.t
val rvar_associated_with : field_ctx -> RVar.t -> (RVar.t * string) option
val tallying_fields : Mlsem_types__.Tvar.MVarSet.t -> (Ty.t * Ty.t) list -> Mlsem_types__.Tvar.Subst.t list