123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354openPpxlibletis_identifier_expr(expr:expression):bool=matchexpr.pexp_descwithPexp_ident_->true|_->falseletrecis_type_var_used_in_core_typevar_name(ct:core_type):bool=matchct.ptyp_descwith|Ptyp_vars->s=var_name(* Check if it matches the variable name *)|Ptyp_arrow(_,ct1,ct2)->is_type_var_used_in_core_typevar_namect1||is_type_var_used_in_core_typevar_namect2|Ptyp_tuplects->List.exists(is_type_var_used_in_core_typevar_name)cts|Ptyp_constr(_,args)->List.exists(is_type_var_used_in_core_typevar_name)args|Ptyp_alias(ct,s)->s=var_name||is_type_var_used_in_core_typevar_namect|Ptyp_poly(_,ct)->is_type_var_used_in_core_typevar_namect|_->false(* Function to check if a type variable is used in a type_declaration *)letis_type_var_usedvar_name(td:Parsetree.type_declaration):bool=letis_used_in_manifest=matchtd.Parsetree.ptype_manifestwith|Somect->is_type_var_used_in_core_typevar_namect|None->falseinletis_used_in_kind=matchtd.Parsetree.ptype_kindwith|Parsetree.Ptype_abstract->is_used_in_manifest|Parsetree.Ptype_variantconstrs->constrs|>List.map(func->c.pcd_args)|>List.exists(function|Pcstr_tupletuple->List.exists(is_type_var_used_in_core_typevar_name)tuple|Pcstr_recordrecord->record|>List.map(funlabel->label.pld_type)|>List.exists(is_type_var_used_in_core_typevar_name))|Parsetree.Ptype_recordlbls->List.exists(funl->is_type_var_used_in_core_typevar_namel.Parsetree.pld_type)lbls|Parsetree.Ptype_open->is_used_in_manifestinis_used_in_manifest||is_used_in_kind