1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378openStdlib0moduleFrom=Ast_500moduleTo=Ast_501letreccopy_toplevel_phrase :Ast_500.Parsetree.toplevel_phrase->Ast_501.Parsetree.toplevel_phrase=function|Ast_500.Parsetree.Ptop_defx0->Ast_501.Parsetree.Ptop_def(copy_structurex0)|Ast_500.Parsetree.Ptop_dirx0->Ast_501.Parsetree.Ptop_dir(copy_toplevel_directivex0)andcopy_toplevel_directive:Ast_500.Parsetree.toplevel_directive->Ast_501.Parsetree.toplevel_directive=fun{Ast_500.Parsetree.pdir_name;Ast_500.Parsetree.pdir_arg;Ast_500.Parsetree.pdir_loc;}->{Ast_501.Parsetree.pdir_name=copy_loc(funx->x)pdir_name;Ast_501.Parsetree.pdir_arg=Option.mapcopy_directive_argumentpdir_arg;Ast_501.Parsetree.pdir_loc=copy_locationpdir_loc;}andcopy_directive_argument:Ast_500.Parsetree.directive_argument->Ast_501.Parsetree.directive_argument=fun{Ast_500.Parsetree.pdira_desc;Ast_500.Parsetree.pdira_loc}->{Ast_501.Parsetree.pdira_desc=copy_directive_argument_descpdira_desc;Ast_501.Parsetree.pdira_loc=copy_locationpdira_loc;}andcopy_directive_argument_desc:Ast_500.Parsetree.directive_argument_desc ->Ast_501.Parsetree.directive_argument_desc =function|Ast_500.Parsetree.Pdir_stringx0->Ast_501.Parsetree.Pdir_stringx0|Ast_500.Parsetree.Pdir_int(x0,x1)->Ast_501.Parsetree.Pdir_int(x0,Option.map(funx->x)x1)|Ast_500.Parsetree.Pdir_identx0->Ast_501.Parsetree.Pdir_ident(copy_Longident_tx0)|Ast_500.Parsetree.Pdir_boolx0->Ast_501.Parsetree.Pdir_boolx0andcopy_expression:Ast_500.Parsetree.expression->Ast_501.Parsetree.expression=fun{Ast_500.Parsetree.pexp_desc;Ast_500.Parsetree.pexp_loc;Ast_500.Parsetree.pexp_loc_stack;Ast_500.Parsetree.pexp_attributes;}->{Ast_501.Parsetree.pexp_desc=copy_expression_descpexp_desc;Ast_501.Parsetree.pexp_loc=copy_locationpexp_loc;Ast_501.Parsetree.pexp_loc_stack=copy_location_stackpexp_loc_stack;Ast_501.Parsetree.pexp_attributes=copy_attributespexp_attributes;}andcopy_expression_desc:Ast_500.Parsetree.expression_desc->Ast_501.Parsetree.expression_desc=function|Ast_500.Parsetree.Pexp_identx0->Ast_501.Parsetree.Pexp_ident(copy_loccopy_Longident_tx0)|Ast_500.Parsetree.Pexp_constantx0->Ast_501.Parsetree.Pexp_constant(copy_constantx0)|Ast_500.Parsetree.Pexp_let(x0,x1,x2)->Ast_501.Parsetree.Pexp_let(copy_rec_flagx0,List.mapcopy_value_bindingx1,copy_expressionx2)|Ast_500.Parsetree.Pexp_functionx0->Ast_501.Parsetree.Pexp_function(List.mapcopy_casex0)|Ast_500.Parsetree.Pexp_fun(x0,x1,x2,x3)->Ast_501.Parsetree.Pexp_fun(copy_arg_labelx0,Option.mapcopy_expressionx1,copy_pattern x2,copy_expressionx3)|Ast_500.Parsetree.Pexp_apply(x0,x1)->Ast_501.Parsetree.Pexp_apply(copy_expressionx0,List.map(funx->letx0,x1=xin(copy_arg_labelx0,copy_expressionx1))x1)|Ast_500.Parsetree.Pexp_match(x0,x1)->Ast_501.Parsetree.Pexp_match(copy_expressionx0,List.mapcopy_casex1)|Ast_500.Parsetree.Pexp_try(x0,x1)->Ast_501.Parsetree.Pexp_try(copy_expressionx0,List.mapcopy_casex1)|Ast_500.Parsetree.Pexp_tuplex0->Ast_501.Parsetree.Pexp_tuple(List.mapcopy_expressionx0)|Ast_500.Parsetree.Pexp_construct(x0,x1)->Ast_501.Parsetree.Pexp_construct(copy_loccopy_Longident_tx0,Option.mapcopy_expressionx1)|Ast_500.Parsetree.Pexp_variant(x0,x1)->Ast_501.Parsetree.Pexp_variant(copy_labelx0,Option.mapcopy_expressionx1)|Ast_500.Parsetree.Pexp_record(x0,x1)->Ast_501.Parsetree.Pexp_record(List.map(funx->letx0,x1=xin(copy_loccopy_Longident_tx0,copy_expressionx1))x0,Option.mapcopy_expressionx1)|Ast_500.Parsetree.Pexp_field(x0,x1)->Ast_501.Parsetree.Pexp_field(copy_expressionx0,copy_loccopy_Longident_tx1)|Ast_500.Parsetree.Pexp_setfield(x0,x1,x2)->Ast_501.Parsetree.Pexp_setfield(copy_expressionx0,copy_loccopy_Longident_tx1,copy_expressionx2)|Ast_500.Parsetree.Pexp_arrayx0->Ast_501.Parsetree.Pexp_array(List.mapcopy_expressionx0)|Ast_500.Parsetree.Pexp_ifthenelse(x0,x1,x2)->Ast_501.Parsetree.Pexp_ifthenelse(copy_expressionx0,copy_expressionx1,Option.mapcopy_expressionx2)|Ast_500.Parsetree.Pexp_sequence(x0,x1)->Ast_501.Parsetree.Pexp_sequence(copy_expressionx0,copy_expressionx1)|Ast_500.Parsetree.Pexp_while(x0,x1)->Ast_501.Parsetree.Pexp_while(copy_expressionx0,copy_expressionx1)|Ast_500.Parsetree.Pexp_for(x0,x1,x2,x3,x4)->Ast_501.Parsetree.Pexp_for(copy_patternx0,copy_expressionx1,copy_expressionx2,copy_direction_flagx3,copy_expressionx4)|Ast_500.Parsetree.Pexp_constraint(x0,x1)->Ast_501.Parsetree.Pexp_constraint(copy_expressionx0,copy_core_typex1)|Ast_500.Parsetree.Pexp_coerce(x0,x1,x2)->Ast_501.Parsetree.Pexp_coerce(copy_expressionx0,Option.mapcopy_core_typex1,copy_core_typex2)|Ast_500.Parsetree.Pexp_send(x0,x1)->Ast_501.Parsetree.Pexp_send(copy_expressionx0,copy_loccopy_labelx1)|Ast_500.Parsetree.Pexp_newx0->Ast_501.Parsetree.Pexp_new(copy_loccopy_Longident_tx0)|Ast_500.Parsetree.Pexp_setinstvar(x0,x1)->Ast_501.Parsetree.Pexp_setinstvar(copy_loccopy_labelx0,copy_expressionx1)|Ast_500.Parsetree.Pexp_overridex0->Ast_501.Parsetree.Pexp_override(List.map(funx->letx0,x1=xin(copy_loccopy_label x0,copy_expressionx1))x0)|Ast_500.Parsetree.Pexp_letmodule(x0,x1,x2)->Ast_501.Parsetree.Pexp_letmodule(copy_loc(funx->Option.map(funx->x)x)x0,copy_module_exprx1,copy_expressionx2)|Ast_500.Parsetree.Pexp_letexception(x0,x1)->Ast_501.Parsetree.Pexp_letexception(copy_extension_constructorx0,copy_expressionx1)|Ast_500.Parsetree.Pexp_assertx0->Ast_501.Parsetree.Pexp_assert(copy_expressionx0)|Ast_500.Parsetree.Pexp_lazyx0->Ast_501.Parsetree.Pexp_lazy(copy_expressionx0)|Ast_500.Parsetree.Pexp_poly(x0,x1)->Ast_501.Parsetree.Pexp_poly(copy_expressionx0,Option.mapcopy_core_typex1)|Ast_500.Parsetree.Pexp_objectx0->Ast_501.Parsetree.Pexp_object(copy_class_structurex0)|Ast_500.Parsetree.Pexp_newtype(x0,x1)->Ast_501.Parsetree.Pexp_newtype(copy_loc(funx->x)x0,copy_expressionx1)|Ast_500.Parsetree.Pexp_packx0->Ast_501.Parsetree.Pexp_pack(copy_module_exprx0)|Ast_500.Parsetree.Pexp_open(x0,x1)->Ast_501.Parsetree.Pexp_open(copy_open_declarationx0,copy_expressionx1)|Ast_500.Parsetree.Pexp_letopx0->Ast_501.Parsetree.Pexp_letop(copy_letopx0)|Ast_500.Parsetree.Pexp_extensionx0->Ast_501.Parsetree.Pexp_extension(copy_extensionx0)|Ast_500.Parsetree.Pexp_unreachable->Ast_501.Parsetree.Pexp_unreachableandcopy_letop:Ast_500.Parsetree.letop->Ast_501.Parsetree.letop=fun{Ast_500.Parsetree.let_;Ast_500.Parsetree.ands;Ast_500.Parsetree.body}->{Ast_501.Parsetree.let_=copy_binding_oplet_;Ast_501.Parsetree.ands=List.mapcopy_binding_opands;Ast_501.Parsetree.body=copy_expression body;}andcopy_binding_op:Ast_500.Parsetree.binding_op->Ast_501.Parsetree.binding_op=fun{Ast_500.Parsetree.pbop_op;Ast_500.Parsetree.pbop_pat;Ast_500.Parsetree.pbop_exp;Ast_500.Parsetree.pbop_loc;}->{Ast_501.Parsetree.pbop_op=copy_loc(funx->x)pbop_op;Ast_501.Parsetree.pbop_pat=copy_patternpbop_pat;Ast_501.Parsetree.pbop_exp=copy_expressionpbop_exp;Ast_501.Parsetree.pbop_loc=copy_locationpbop_loc;}andcopy_direction_flag:Ast_500.Asttypes.direction_flag->Ast_501.Asttypes.direction_flag =function|Ast_500.Asttypes.Upto->Ast_501.Asttypes.Upto|Ast_500.Asttypes.Downto->Ast_501.Asttypes.Downtoandcopy_case:Ast_500.Parsetree.case->Ast_501.Parsetree.case=fun{Ast_500.Parsetree.pc_lhs;Ast_500.Parsetree.pc_guard;Ast_500.Parsetree.pc_rhs;}->{Ast_501.Parsetree.pc_lhs=copy_patternpc_lhs;Ast_501.Parsetree.pc_guard=Option.mapcopy_expressionpc_guard;Ast_501.Parsetree.pc_rhs=copy_expressionpc_rhs;}andcopy_value_binding:Ast_500.Parsetree.value_binding ->Ast_501.Parsetree.value_binding =fun{Ast_500.Parsetree.pvb_pat;Ast_500.Parsetree.pvb_expr;Ast_500.Parsetree.pvb_attributes;Ast_500.Parsetree.pvb_loc;}->(* Copied and adapted from OCaml 5.0 Ast_helper *)letvarify_constructorsvar_namest=letvar_names=List.map(funv->v.Location.txt)var_namesinletrecloopt=let desc=match t.Ast_500.Parsetree.ptyp_descwith|Ast_500.Parsetree.Ptyp_any->Ast_500.Parsetree.Ptyp_any|Ptyp_varx->Ptyp_varx|Ptyp_arrow(label,core_type,core_type')->Ptyp_arrow (label,loopcore_type,loopcore_type')|Ptyp_tuplelst->Ptyp_tuple (List.maplooplst)|Ptyp_constr({txt =Longident.Lidents},[])whenList.memsvar_names->Ptyp_var s|Ptyp_constr(longident,lst)->Ptyp_constr(longident,List.maplooplst)|Ptyp_object(lst,o)->Ptyp_object(List.maploop_object_field lst,o)|Ptyp_class(longident,lst)->Ptyp_class(longident,List.maplooplst)|Ptyp_alias (core_type,string)->Ptyp_alias(loopcore_type,string)|Ptyp_variant(row_field_list,flag,lbl_lst_option)->Ptyp_variant(List.maploop_row_fieldrow_field_list,flag,lbl_lst_option)|Ptyp_poly(string_lst,core_type)->Ptyp_poly (string_lst,loopcore_type)|Ptyp_package (longident,lst)->Ptyp_package(longident,List.map(fun(n,typ)->(n,looptyp))lst)|Ptyp_extension(s,arg)->Ptyp_extension(s,arg)in{twithptyp_desc=desc}andloop_row_fieldfield=letprf_desc=matchfield.prf_descwith|Ast_500.Parsetree.Rtag(label,flag,lst)->Ast_500.Parsetree.Rtag(label,flag,List.maplooplst)|Rinherit t->Rinherit(loopt)in{fieldwithprf_desc}andloop_object_fieldfield=letpof_desc=matchfield.pof_descwith|Ast_500.Parsetree.Otag(label,t)->Ast_500.Parsetree.Otag(label,loopt)|Oinheritt->Oinherit(loopt)in{fieldwithpof_desc}inlooptin(* Match the form of the expr and pattern to decide the value of
[pvb_constraint]. Adapted from OCaml 5.0 PPrinter. *)lettyvars_strtyvars=List.map(funv->v.Location.txt)tyvarsinletresugarable_value_bindingpe=letvalue_pattern=matchpwith|{Ast_500.Parsetree.ppat_desc=Ppat_constraint(({ppat_desc=Ppat_var_}aspat),({ptyp_desc=Ptyp_poly (args_tyvars,rt)}asty_ext));ppat_attributes =[];}->assert(matchrt.ptyp_descwithPtyp_poly_->false |_->true);letty=matchargs_tyvarswith[]->rt|_->ty_extin`Var(pat,args_tyvars,rt,ty)|{Ast_500.Parsetree.ppat_desc=Ppat_constraint(pat,rt);ppat_attributes=[];}->`NonVar(pat,rt)|_->`Noneinletrecvalue_exptyvarse=matchewith|{Ast_500.Parsetree.pexp_desc=Pexp_newtype(tyvar,e);pexp_attributes=[];}->value_exp(tyvar::tyvars)e|{pexp_desc =Pexp_constraint(e,ct);pexp_attributes=[]}->Some(List.revtyvars,e,ct)|_->Noneinlet value_exp=value_exp[]einmatch(value_pattern,value_exp)with|`Var(p,pt_tyvars,pt_ct,extern_ct),Some(e_tyvars,inner_e,e_ct)whentyvars_strpt_tyvars=tyvars_stre_tyvars->letety=varify_constructorse_tyvarse_ctinifety=pt_ctthen`Desugared_locally_abstract(p,pt_tyvars,e_ct,inner_e)else(* the expression constraint and the pattern constraint,
don't match, but we still have a Ptyp_poly pattern constraint that
should be resugared to a value binding *)`Univars(p,pt_tyvars,extern_ct,e)|`Var(p,pt_tyvars,pt_ct,extern_ct),_->`Univars (p,pt_tyvars,extern_ct,e)|`NonVar(pat,ct),_->`NonVar(pat,ct,e)|_->`Noneinletwith_constraintty_varstyp=lettyp=copy_core_type typinSome(Ast_501.Parsetree.Pvc_constraint{locally_abstract_univars=ty_vars;typ})inletpvb_pat,pvb_expr,pvb_constraint=matchresugarable_value_bindingpvb_patpvb_exprwith|`Desugared_locally_abstract(p,ty_vars,typ,e)->(p,e,with_constraint ty_varstyp)|`Univars(pat,[],ct,expr)->((* check if we are in the [let x : ty? :> coer = expr ] case *)matchexprwith|{pexp_desc=Pexp_coerce (expr,gr,coerce);pexp_attributes=[]}->letground=Option.mapcopy_core_typegrinletcoercion=copy_core_type coerceinletpvb_constraint=Some(Ast_501.Parsetree.Pvc_coercion{ground;coercion})in(pat,expr,pvb_constraint)|_->(pat,expr,with_constraint []ct))|`Univars(pat,_,ct,expr)->(pat,expr,with_constraint[]ct)|`NonVar(p,typ,e)->(p,e,with_constraint[]typ)|`None->(pvb_pat,pvb_expr,None)in{Ast_501.Parsetree.pvb_pat=copy_patternpvb_pat;Ast_501.Parsetree.pvb_expr=copy_expressionpvb_expr;Ast_501.Parsetree.pvb_constraint;Ast_501.Parsetree.pvb_attributes =copy_attributespvb_attributes;Ast_501.Parsetree.pvb_loc=copy_locationpvb_loc;}andcopy_pattern:Ast_500.Parsetree.pattern->Ast_501.Parsetree.pattern=fun{Ast_500.Parsetree.ppat_desc;Ast_500.Parsetree.ppat_loc;Ast_500.Parsetree.ppat_loc_stack;Ast_500.Parsetree.ppat_attributes;}->{Ast_501.Parsetree.ppat_desc=copy_pattern_descppat_desc;Ast_501.Parsetree.ppat_loc=copy_locationppat_loc;Ast_501.Parsetree.ppat_loc_stack=copy_location_stackppat_loc_stack;Ast_501.Parsetree.ppat_attributes=copy_attributesppat_attributes;}andcopy_pattern_desc:Ast_500.Parsetree.pattern_desc ->Ast_501.Parsetree.pattern_desc=function|Ast_500.Parsetree.Ppat_any->Ast_501.Parsetree.Ppat_any|Ast_500.Parsetree.Ppat_varx0->Ast_501.Parsetree.Ppat_var(copy_loc(funx->x)x0)|Ast_500.Parsetree.Ppat_alias(x0,x1)->Ast_501.Parsetree.Ppat_alias(copy_patternx0,copy_loc(funx->x)x1)|Ast_500.Parsetree.Ppat_constantx0->Ast_501.Parsetree.Ppat_constant(copy_constantx0)|Ast_500.Parsetree.Ppat_interval(x0,x1)->Ast_501.Parsetree.Ppat_interval(copy_constantx0,copy_constantx1)|Ast_500.Parsetree.Ppat_tuplex0->Ast_501.Parsetree.Ppat_tuple(List.mapcopy_patternx0)|Ast_500.Parsetree.Ppat_construct(x0,x1)->Ast_501.Parsetree.Ppat_construct(copy_loccopy_Longident_tx0,Option.map(funx->letx0,x1=xin(List.map(funx->copy_loc(funx->x)x)x0,copy_patternx1))x1)|Ast_500.Parsetree.Ppat_variant(x0,x1)->Ast_501.Parsetree.Ppat_variant(copy_labelx0,Option.mapcopy_patternx1)|Ast_500.Parsetree.Ppat_record(x0,x1)->Ast_501.Parsetree.Ppat_record(List.map(funx->letx0,x1=xin(copy_loccopy_Longident_tx0,copy_patternx1))x0,copy_closed_flagx1)|Ast_500.Parsetree.Ppat_arrayx0->Ast_501.Parsetree.Ppat_array(List.mapcopy_patternx0)|Ast_500.Parsetree.Ppat_or(x0,x1)->Ast_501.Parsetree.Ppat_or(copy_patternx0,copy_patternx1)|Ast_500.Parsetree.Ppat_constraint(x0,x1)->Ast_501.Parsetree.Ppat_constraint(copy_patternx0,copy_core_typex1)|Ast_500.Parsetree.Ppat_typex0->Ast_501.Parsetree.Ppat_type(copy_loccopy_Longident_tx0)|Ast_500.Parsetree.Ppat_lazyx0->Ast_501.Parsetree.Ppat_lazy(copy_patternx0)|Ast_500.Parsetree.Ppat_unpackx0->Ast_501.Parsetree.Ppat_unpack(copy_loc(funx->Option.map(funx->x)x)x0)|Ast_500.Parsetree.Ppat_exceptionx0->Ast_501.Parsetree.Ppat_exception(copy_patternx0)|Ast_500.Parsetree.Ppat_extensionx0->Ast_501.Parsetree.Ppat_extension(copy_extensionx0)|Ast_500.Parsetree.Ppat_open(x0,x1)->Ast_501.Parsetree.Ppat_open(copy_loccopy_Longident_tx0,copy_patternx1)andcopy_core_type:Ast_500.Parsetree.core_type->Ast_501.Parsetree.core_type=fun{Ast_500.Parsetree.ptyp_desc;Ast_500.Parsetree.ptyp_loc;Ast_500.Parsetree.ptyp_loc_stack;Ast_500.Parsetree.ptyp_attributes;}->{Ast_501.Parsetree.ptyp_desc=copy_core_type_descptyp_desc;Ast_501.Parsetree.ptyp_loc=copy_locationptyp_loc;Ast_501.Parsetree.ptyp_loc_stack=copy_location_stackptyp_loc_stack;Ast_501.Parsetree.ptyp_attributes=copy_attributesptyp_attributes;}andcopy_location_stack:Ast_500.Parsetree.location_stack->Ast_501.Parsetree.location_stack=funx->List.mapcopy_location xandcopy_core_type_desc:Ast_500.Parsetree.core_type_desc->Ast_501.Parsetree.core_type_desc=function|Ast_500.Parsetree.Ptyp_any->Ast_501.Parsetree.Ptyp_any|Ast_500.Parsetree.Ptyp_varx0->Ast_501.Parsetree.Ptyp_varx0|Ast_500.Parsetree.Ptyp_arrow(x0,x1,x2)->Ast_501.Parsetree.Ptyp_arrow(copy_arg_labelx0,copy_core_typex1,copy_core_typex2)|Ast_500.Parsetree.Ptyp_tuplex0->Ast_501.Parsetree.Ptyp_tuple(List.mapcopy_core_typex0)|Ast_500.Parsetree.Ptyp_constr(x0,x1)->Ast_501.Parsetree.Ptyp_constr(copy_loccopy_Longident_tx0,List.mapcopy_core_typex1)|Ast_500.Parsetree.Ptyp_object(x0,x1)->Ast_501.Parsetree.Ptyp_object(List.mapcopy_object_fieldx0,copy_closed_flagx1)|Ast_500.Parsetree.Ptyp_class(x0,x1)->Ast_501.Parsetree.Ptyp_class(copy_loccopy_Longident_tx0,List.mapcopy_core_typex1)|Ast_500.Parsetree.Ptyp_alias(x0,x1)->Ast_501.Parsetree.Ptyp_alias(copy_core_typex0,x1)|Ast_500.Parsetree.Ptyp_variant(x0,x1,x2)->Ast_501.Parsetree.Ptyp_variant(List.mapcopy_row_fieldx0,copy_closed_flag x1,Option.map(funx->List.mapcopy_labelx)x2)|Ast_500.Parsetree.Ptyp_poly(x0,x1)->Ast_501.Parsetree.Ptyp_poly(List.map(funx->copy_loc(funx->x)x)x0,copy_core_typex1)|Ast_500.Parsetree.Ptyp_packagex0->Ast_501.Parsetree.Ptyp_package(copy_package_typex0)|Ast_500.Parsetree.Ptyp_extensionx0->Ast_501.Parsetree.Ptyp_extension(copy_extensionx0)andcopy_package_type:Ast_500.Parsetree.package_type ->Ast_501.Parsetree.package_type=funx->letx0,x1=xin(copy_loccopy_Longident_tx0,List.map(funx->letx0,x1=xin(copy_loccopy_Longident_tx0,copy_core_typex1))x1)andcopy_row_field:Ast_500.Parsetree.row_field->Ast_501.Parsetree.row_field=fun{Ast_500.Parsetree.prf_desc;Ast_500.Parsetree.prf_loc;Ast_500.Parsetree.prf_attributes;}->{Ast_501.Parsetree.prf_desc=copy_row_field_descprf_desc;Ast_501.Parsetree.prf_loc=copy_locationprf_loc;Ast_501.Parsetree.prf_attributes=copy_attributesprf_attributes;}andcopy_row_field_desc:Ast_500.Parsetree.row_field_desc->Ast_501.Parsetree.row_field_desc=function|Ast_500.Parsetree.Rtag(x0,x1,x2)->Ast_501.Parsetree.Rtag(copy_loccopy_labelx0,x1,List.mapcopy_core_typex2)|Ast_500.Parsetree.Rinheritx0->Ast_501.Parsetree.Rinherit(copy_core_typex0)andcopy_object_field:Ast_500.Parsetree.object_field ->Ast_501.Parsetree.object_field=fun{Ast_500.Parsetree.pof_desc;Ast_500.Parsetree.pof_loc;Ast_500.Parsetree.pof_attributes;}->{Ast_501.Parsetree.pof_desc=copy_object_field_descpof_desc;Ast_501.Parsetree.pof_loc=copy_locationpof_loc;Ast_501.Parsetree.pof_attributes=copy_attributespof_attributes;}andcopy_attributes:Ast_500.Parsetree.attributes->Ast_501.Parsetree.attributes=funx->List.mapcopy_attribute xandcopy_attribute:Ast_500.Parsetree.attribute->Ast_501.Parsetree.attribute=fun{Ast_500.Parsetree.attr_name;Ast_500.Parsetree.attr_payload;Ast_500.Parsetree.attr_loc;}->{Ast_501.Parsetree.attr_name=copy_loc(funx->x)attr_name;Ast_501.Parsetree.attr_payload =copy_payloadattr_payload;Ast_501.Parsetree.attr_loc=copy_locationattr_loc;}andcopy_payload:Ast_500.Parsetree.payload->Ast_501.Parsetree.payload=function|Ast_500.Parsetree.PStrx0->Ast_501.Parsetree.PStr(copy_structurex0)|Ast_500.Parsetree.PSigx0->Ast_501.Parsetree.PSig(copy_signaturex0)|Ast_500.Parsetree.PTypx0->Ast_501.Parsetree.PTyp(copy_core_typex0)|Ast_500.Parsetree.PPat(x0,x1)->Ast_501.Parsetree.PPat(copy_patternx0,Option.mapcopy_expressionx1)andcopy_structure :Ast_500.Parsetree.structure->Ast_501.Parsetree.structure=funx->List.mapcopy_structure_itemxandcopy_structure_item :Ast_500.Parsetree.structure_item->Ast_501.Parsetree.structure_item=fun{Ast_500.Parsetree.pstr_desc;Ast_500.Parsetree.pstr_loc}->{Ast_501.Parsetree.pstr_desc=copy_structure_item_descpstr_desc;Ast_501.Parsetree.pstr_loc=copy_locationpstr_loc;}andcopy_structure_item_desc:Ast_500.Parsetree.structure_item_desc->Ast_501.Parsetree.structure_item_desc=function|Ast_500.Parsetree.Pstr_eval(x0,x1)->Ast_501.Parsetree.Pstr_eval(copy_expressionx0,copy_attributesx1)|Ast_500.Parsetree.Pstr_value(x0,x1)->Ast_501.Parsetree.Pstr_value(copy_rec_flagx0,List.mapcopy_value_bindingx1)|Ast_500.Parsetree.Pstr_primitivex0->Ast_501.Parsetree.Pstr_primitive(copy_value_descriptionx0)|Ast_500.Parsetree.Pstr_type(x0,x1)->Ast_501.Parsetree.Pstr_type(copy_rec_flagx0,List.mapcopy_type_declarationx1)|Ast_500.Parsetree.Pstr_typextx0->Ast_501.Parsetree.Pstr_typext(copy_type_extensionx0)|Ast_500.Parsetree.Pstr_exceptionx0->Ast_501.Parsetree.Pstr_exception(copy_type_exceptionx0)|Ast_500.Parsetree.Pstr_modulex0->Ast_501.Parsetree.Pstr_module(copy_module_bindingx0)|Ast_500.Parsetree.Pstr_recmodulex0->Ast_501.Parsetree.Pstr_recmodule(List.mapcopy_module_bindingx0)|Ast_500.Parsetree.Pstr_modtypex0->Ast_501.Parsetree.Pstr_modtype(copy_module_type_declarationx0)|Ast_500.Parsetree.Pstr_openx0->Ast_501.Parsetree.Pstr_open(copy_open_declarationx0)|Ast_500.Parsetree.Pstr_classx0->Ast_501.Parsetree.Pstr_class(List.mapcopy_class_declarationx0)|Ast_500.Parsetree.Pstr_class_typex0->Ast_501.Parsetree.Pstr_class_type(List.mapcopy_class_type_declarationx0)|Ast_500.Parsetree.Pstr_includex0->Ast_501.Parsetree.Pstr_include(copy_include_declarationx0)|Ast_500.Parsetree.Pstr_attributex0->Ast_501.Parsetree.Pstr_attribute(copy_attributex0)|Ast_500.Parsetree.Pstr_extension(x0,x1)->Ast_501.Parsetree.Pstr_extension(copy_extensionx0,copy_attributesx1)andcopy_include_declaration:Ast_500.Parsetree.include_declaration->Ast_501.Parsetree.include_declaration=funx->copy_include_infoscopy_module_exprxandcopy_class_declaration:Ast_500.Parsetree.class_declaration->Ast_501.Parsetree.class_declaration=funx->copy_class_infoscopy_class_exprxandcopy_class_expr:Ast_500.Parsetree.class_expr->Ast_501.Parsetree.class_expr=fun{Ast_500.Parsetree.pcl_desc;Ast_500.Parsetree.pcl_loc;Ast_500.Parsetree.pcl_attributes;}->{Ast_501.Parsetree.pcl_desc=copy_class_expr_descpcl_desc;Ast_501.Parsetree.pcl_loc=copy_locationpcl_loc;Ast_501.Parsetree.pcl_attributes=copy_attributespcl_attributes;}andcopy_class_expr_desc:Ast_500.Parsetree.class_expr_desc->Ast_501.Parsetree.class_expr_desc=function|Ast_500.Parsetree.Pcl_constr(x0,x1)->Ast_501.Parsetree.Pcl_constr(copy_loccopy_Longident_tx0,List.mapcopy_core_typex1)|Ast_500.Parsetree.Pcl_structurex0->Ast_501.Parsetree.Pcl_structure(copy_class_structurex0)|Ast_500.Parsetree.Pcl_fun(x0,x1,x2,x3)->Ast_501.Parsetree.Pcl_fun(copy_arg_labelx0,Option.mapcopy_expressionx1,copy_pattern x2,copy_class_exprx3)|Ast_500.Parsetree.Pcl_apply(x0,x1)->Ast_501.Parsetree.Pcl_apply(copy_class_exprx0,List.map(funx->letx0,x1=xin(copy_arg_labelx0,copy_expressionx1))x1)|Ast_500.Parsetree.Pcl_let(x0,x1,x2)->Ast_501.Parsetree.Pcl_let(copy_rec_flagx0,List.mapcopy_value_bindingx1,copy_class_exprx2)|Ast_500.Parsetree.Pcl_constraint(x0,x1)->Ast_501.Parsetree.Pcl_constraint(copy_class_exprx0,copy_class_typex1)|Ast_500.Parsetree.Pcl_extensionx0->Ast_501.Parsetree.Pcl_extension(copy_extensionx0)|Ast_500.Parsetree.Pcl_open(x0,x1)->Ast_501.Parsetree.Pcl_open(copy_open_descriptionx0,copy_class_exprx1)andcopy_class_structure:Ast_500.Parsetree.class_structure->Ast_501.Parsetree.class_structure=fun{Ast_500.Parsetree.pcstr_self;Ast_500.Parsetree.pcstr_fields}->{Ast_501.Parsetree.pcstr_self=copy_patternpcstr_self;Ast_501.Parsetree.pcstr_fields=List.mapcopy_class_fieldpcstr_fields;}andcopy_class_field:Ast_500.Parsetree.class_field->Ast_501.Parsetree.class_field =fun{Ast_500.Parsetree.pcf_desc;Ast_500.Parsetree.pcf_loc;Ast_500.Parsetree.pcf_attributes;}->{Ast_501.Parsetree.pcf_desc=copy_class_field_descpcf_desc;Ast_501.Parsetree.pcf_loc=copy_locationpcf_loc;Ast_501.Parsetree.pcf_attributes=copy_attributespcf_attributes;}andcopy_class_field_desc:Ast_500.Parsetree.class_field_desc->Ast_501.Parsetree.class_field_desc=function|Ast_500.Parsetree.Pcf_inherit(x0,x1,x2)->Ast_501.Parsetree.Pcf_inherit(copy_override_flagx0,copy_class_exprx1,Option.map(funx->copy_loc(funx->x)x)x2)|Ast_500.Parsetree.Pcf_valx0->Ast_501.Parsetree.Pcf_val(letx0,x1,x2=x0in(copy_loccopy_labelx0,copy_mutable_flagx1,copy_class_field_kindx2))|Ast_500.Parsetree.Pcf_methodx0->Ast_501.Parsetree.Pcf_method(letx0,x1,x2=x0in(copy_loccopy_labelx0,copy_private_flagx1,copy_class_field_kindx2))|Ast_500.Parsetree.Pcf_constraintx0->Ast_501.Parsetree.Pcf_constraint(letx0,x1=x0in(copy_core_typex0,copy_core_typex1))|Ast_500.Parsetree.Pcf_initializerx0->Ast_501.Parsetree.Pcf_initializer(copy_expressionx0)|Ast_500.Parsetree.Pcf_attributex0->Ast_501.Parsetree.Pcf_attribute(copy_attributex0)|Ast_500.Parsetree.Pcf_extensionx0->Ast_501.Parsetree.Pcf_extension(copy_extensionx0)andcopy_class_field_kind:Ast_500.Parsetree.class_field_kind->Ast_501.Parsetree.class_field_kind=function|Ast_500.Parsetree.Cfk_virtualx0->Ast_501.Parsetree.Cfk_virtual(copy_core_typex0)|Ast_500.Parsetree.Cfk_concrete(x0,x1)->Ast_501.Parsetree.Cfk_concrete(copy_override_flagx0,copy_expressionx1)andcopy_open_declaration:Ast_500.Parsetree.open_declaration->Ast_501.Parsetree.open_declaration=funx->copy_open_infoscopy_module_exprxandcopy_module_binding:Ast_500.Parsetree.module_binding->Ast_501.Parsetree.module_binding=fun{Ast_500.Parsetree.pmb_name;Ast_500.Parsetree.pmb_expr;Ast_500.Parsetree.pmb_attributes;Ast_500.Parsetree.pmb_loc;}->{Ast_501.Parsetree.pmb_name=copy_loc(funx->Option.map(funx->x)x)pmb_name;Ast_501.Parsetree.pmb_expr=copy_module_exprpmb_expr;Ast_501.Parsetree.pmb_attributes=copy_attributespmb_attributes;Ast_501.Parsetree.pmb_loc=copy_locationpmb_loc;}andcopy_module_expr:Ast_500.Parsetree.module_expr->Ast_501.Parsetree.module_expr =fun{Ast_500.Parsetree.pmod_desc;Ast_500.Parsetree.pmod_loc;Ast_500.Parsetree.pmod_attributes;}->{Ast_501.Parsetree.pmod_desc=copy_module_expr_descpmod_desc;Ast_501.Parsetree.pmod_loc=copy_locationpmod_loc;Ast_501.Parsetree.pmod_attributes=copy_attributespmod_attributes;}andcopy_module_expr_desc:Ast_500.Parsetree.module_expr_desc->Ast_501.Parsetree.module_expr_desc=function|Ast_500.Parsetree.Pmod_identx0->Ast_501.Parsetree.Pmod_ident(copy_loccopy_Longident_tx0)|Ast_500.Parsetree.Pmod_structurex0->Ast_501.Parsetree.Pmod_structure(copy_structurex0)|Ast_500.Parsetree.Pmod_functor(x0,x1)->Ast_501.Parsetree.Pmod_functor(copy_functor_parameterx0,copy_module_exprx1)|Ast_500.Parsetree.Pmod_apply(x0,x1)->letx1,is_unit=matchx1.pmod_descwith|Pmod_structure[]->letrecextract_attracc:Ast_500.Parsetree.attributes->_=function|[]->(List.revacc,true)|{attr_name={txt="ppxlib.migration.keep_structure";_};_;}::q->(List.rev_appendaccq,false)|hd::tl->extract_attr(hd::acc)tlinletpmod_attributes,b=extract_attr[]x1.pmod_attributesin({x1withpmod_attributes},b)|_->(x1,false)inifis_unitthenAst_501.Parsetree.Pmod_apply_unit(copy_module_exprx0)elseAst_501.Parsetree.Pmod_apply(copy_module_exprx0,copy_module_exprx1)|Ast_500.Parsetree.Pmod_constraint(x0,x1)->Ast_501.Parsetree.Pmod_constraint(copy_module_exprx0,copy_module_typex1)|Ast_500.Parsetree.Pmod_unpackx0->Ast_501.Parsetree.Pmod_unpack(copy_expressionx0)|Ast_500.Parsetree.Pmod_extensionx0->Ast_501.Parsetree.Pmod_extension(copy_extensionx0)andcopy_functor_parameter:Ast_500.Parsetree.functor_parameter->Ast_501.Parsetree.functor_parameter=function|Ast_500.Parsetree.Unit->Ast_501.Parsetree.Unit|Ast_500.Parsetree.Named(x0,x1)->Ast_501.Parsetree.Named(copy_loc(funx->Option.map(funx->x)x)x0,copy_module_typex1)andcopy_module_type:Ast_500.Parsetree.module_type->Ast_501.Parsetree.module_type =fun{Ast_500.Parsetree.pmty_desc;Ast_500.Parsetree.pmty_loc;Ast_500.Parsetree.pmty_attributes;}->{Ast_501.Parsetree.pmty_desc=copy_module_type_descpmty_desc;Ast_501.Parsetree.pmty_loc=copy_locationpmty_loc;Ast_501.Parsetree.pmty_attributes=copy_attributespmty_attributes;}andcopy_module_type_desc:Ast_500.Parsetree.module_type_desc->Ast_501.Parsetree.module_type_desc=function|Ast_500.Parsetree.Pmty_identx0->Ast_501.Parsetree.Pmty_ident(copy_loccopy_Longident_tx0)|Ast_500.Parsetree.Pmty_signaturex0->Ast_501.Parsetree.Pmty_signature(copy_signaturex0)|Ast_500.Parsetree.Pmty_functor(x0,x1)->Ast_501.Parsetree.Pmty_functor(copy_functor_parameterx0,copy_module_typex1)|Ast_500.Parsetree.Pmty_with(x0,x1)->Ast_501.Parsetree.Pmty_with(copy_module_typex0,List.mapcopy_with_constraintx1)|Ast_500.Parsetree.Pmty_typeofx0->Ast_501.Parsetree.Pmty_typeof(copy_module_exprx0)|Ast_500.Parsetree.Pmty_extensionx0->Ast_501.Parsetree.Pmty_extension(copy_extensionx0)|Ast_500.Parsetree.Pmty_aliasx0->Ast_501.Parsetree.Pmty_alias(copy_loccopy_Longident_tx0)andcopy_with_constraint:Ast_500.Parsetree.with_constraint->Ast_501.Parsetree.with_constraint=function|Ast_500.Parsetree.Pwith_type(x0,x1)->Ast_501.Parsetree.Pwith_type(copy_loccopy_Longident_tx0,copy_type_declarationx1)|Ast_500.Parsetree.Pwith_module(x0,x1)->Ast_501.Parsetree.Pwith_module(copy_loccopy_Longident_tx0,copy_loccopy_Longident_tx1)|Ast_500.Parsetree.Pwith_modtype(x0,x1)->Ast_501.Parsetree.Pwith_modtype(copy_loccopy_Longident_tx0,copy_module_typex1)|Ast_500.Parsetree.Pwith_modtypesubst(x0,x1)->Ast_501.Parsetree.Pwith_modtypesubst(copy_loccopy_Longident_tx0,copy_module_typex1)|Ast_500.Parsetree.Pwith_typesubst(x0,x1)->Ast_501.Parsetree.Pwith_typesubst(copy_loccopy_Longident_tx0,copy_type_declarationx1)|Ast_500.Parsetree.Pwith_modsubst(x0,x1)->Ast_501.Parsetree.Pwith_modsubst(copy_loccopy_Longident_tx0,copy_loccopy_Longident_tx1)andcopy_signature:Ast_500.Parsetree.signature->Ast_501.Parsetree.signature=funx->List.mapcopy_signature_itemxandcopy_signature_item :Ast_500.Parsetree.signature_item->Ast_501.Parsetree.signature_item=fun{Ast_500.Parsetree.psig_desc;Ast_500.Parsetree.psig_loc}->{Ast_501.Parsetree.psig_desc=copy_signature_item_descpsig_desc;Ast_501.Parsetree.psig_loc=copy_locationpsig_loc;}andcopy_signature_item_desc:Ast_500.Parsetree.signature_item_desc->Ast_501.Parsetree.signature_item_desc=function|Ast_500.Parsetree.Psig_valuex0->Ast_501.Parsetree.Psig_value(copy_value_descriptionx0)|Ast_500.Parsetree.Psig_type(x0,x1)->Ast_501.Parsetree.Psig_type(copy_rec_flagx0,List.mapcopy_type_declarationx1)|Ast_500.Parsetree.Psig_typesubstx0->Ast_501.Parsetree.Psig_typesubst(List.mapcopy_type_declarationx0)|Ast_500.Parsetree.Psig_typextx0->Ast_501.Parsetree.Psig_typext(copy_type_extensionx0)|Ast_500.Parsetree.Psig_exceptionx0->Ast_501.Parsetree.Psig_exception(copy_type_exceptionx0)|Ast_500.Parsetree.Psig_modulex0->Ast_501.Parsetree.Psig_module(copy_module_declarationx0)|Ast_500.Parsetree.Psig_modsubstx0->Ast_501.Parsetree.Psig_modsubst(copy_module_substitutionx0)|Ast_500.Parsetree.Psig_recmodulex0->Ast_501.Parsetree.Psig_recmodule(List.mapcopy_module_declarationx0)|Ast_500.Parsetree.Psig_modtypex0->Ast_501.Parsetree.Psig_modtype(copy_module_type_declarationx0)|Ast_500.Parsetree.Psig_modtypesubstx0->Ast_501.Parsetree.Psig_modtypesubst(copy_module_type_declarationx0)|Ast_500.Parsetree.Psig_openx0->Ast_501.Parsetree.Psig_open(copy_open_descriptionx0)|Ast_500.Parsetree.Psig_includex0->Ast_501.Parsetree.Psig_include(copy_include_descriptionx0)|Ast_500.Parsetree.Psig_classx0->Ast_501.Parsetree.Psig_class(List.mapcopy_class_descriptionx0)|Ast_500.Parsetree.Psig_class_typex0->Ast_501.Parsetree.Psig_class_type(List.mapcopy_class_type_declarationx0)|Ast_500.Parsetree.Psig_attributex0->Ast_501.Parsetree.Psig_attribute(copy_attributex0)|Ast_500.Parsetree.Psig_extension(x0,x1)->Ast_501.Parsetree.Psig_extension(copy_extensionx0,copy_attributesx1)andcopy_class_type_declaration:Ast_500.Parsetree.class_type_declaration ->Ast_501.Parsetree.class_type_declaration =funx->copy_class_infoscopy_class_type xandcopy_class_description:Ast_500.Parsetree.class_description->Ast_501.Parsetree.class_description=funx->copy_class_infoscopy_class_typexandcopy_class_type:Ast_500.Parsetree.class_type->Ast_501.Parsetree.class_type=fun{Ast_500.Parsetree.pcty_desc;Ast_500.Parsetree.pcty_loc;Ast_500.Parsetree.pcty_attributes;}->{Ast_501.Parsetree.pcty_desc=copy_class_type_descpcty_desc;Ast_501.Parsetree.pcty_loc=copy_locationpcty_loc;Ast_501.Parsetree.pcty_attributes=copy_attributespcty_attributes;}andcopy_class_type_desc:Ast_500.Parsetree.class_type_desc->Ast_501.Parsetree.class_type_desc=function|Ast_500.Parsetree.Pcty_constr(x0,x1)->Ast_501.Parsetree.Pcty_constr(copy_loccopy_Longident_tx0,List.mapcopy_core_typex1)|Ast_500.Parsetree.Pcty_signaturex0->Ast_501.Parsetree.Pcty_signature(copy_class_signaturex0)|Ast_500.Parsetree.Pcty_arrow(x0,x1,x2)->Ast_501.Parsetree.Pcty_arrow(copy_arg_labelx0,copy_core_typex1,copy_class_typex2)|Ast_500.Parsetree.Pcty_extensionx0->Ast_501.Parsetree.Pcty_extension(copy_extensionx0)|Ast_500.Parsetree.Pcty_open(x0,x1)->Ast_501.Parsetree.Pcty_open(copy_open_descriptionx0,copy_class_typex1)andcopy_class_signature:Ast_500.Parsetree.class_signature->Ast_501.Parsetree.class_signature=fun{Ast_500.Parsetree.pcsig_self;Ast_500.Parsetree.pcsig_fields}->{Ast_501.Parsetree.pcsig_self=copy_core_typepcsig_self;Ast_501.Parsetree.pcsig_fields=List.mapcopy_class_type_fieldpcsig_fields;}andcopy_class_type_field:Ast_500.Parsetree.class_type_field->Ast_501.Parsetree.class_type_field=fun{Ast_500.Parsetree.pctf_desc;Ast_500.Parsetree.pctf_loc;Ast_500.Parsetree.pctf_attributes;}->{Ast_501.Parsetree.pctf_desc=copy_class_type_field_descpctf_desc;Ast_501.Parsetree.pctf_loc=copy_locationpctf_loc;Ast_501.Parsetree.pctf_attributes=copy_attributespctf_attributes;}andcopy_class_type_field_desc:Ast_500.Parsetree.class_type_field_desc ->Ast_501.Parsetree.class_type_field_desc =function|Ast_500.Parsetree.Pctf_inheritx0->Ast_501.Parsetree.Pctf_inherit(copy_class_typex0)|Ast_500.Parsetree.Pctf_valx0->Ast_501.Parsetree.Pctf_val(letx0,x1,x2,x3=x0in(copy_loccopy_labelx0,copy_mutable_flagx1,copy_virtual_flagx2,copy_core_typex3))|Ast_500.Parsetree.Pctf_methodx0->Ast_501.Parsetree.Pctf_method(letx0,x1,x2,x3=x0in(copy_loccopy_labelx0,copy_private_flagx1,copy_virtual_flagx2,copy_core_typex3))|Ast_500.Parsetree.Pctf_constraintx0->Ast_501.Parsetree.Pctf_constraint(letx0,x1=x0in(copy_core_typex0,copy_core_typex1))|Ast_500.Parsetree.Pctf_attributex0->Ast_501.Parsetree.Pctf_attribute(copy_attributex0)|Ast_500.Parsetree.Pctf_extensionx0->Ast_501.Parsetree.Pctf_extension(copy_extensionx0)andcopy_extension:Ast_500.Parsetree.extension->Ast_501.Parsetree.extension=funx->letx0,x1=xin(copy_loc(funx-> x)x0,copy_payloadx1)andcopy_class_infos:'f0 'g0.('f0->'g0)->'f0Ast_500.Parsetree.class_infos->'g0Ast_501.Parsetree.class_infos=funf0{Ast_500.Parsetree.pci_virt;Ast_500.Parsetree.pci_params;Ast_500.Parsetree.pci_name;Ast_500.Parsetree.pci_expr;Ast_500.Parsetree.pci_loc;Ast_500.Parsetree.pci_attributes;}->{Ast_501.Parsetree.pci_virt=copy_virtual_flagpci_virt;Ast_501.Parsetree.pci_params=List.map(funx->letx0,x1=xin(copy_core_typex0,letx0,x1=x1in(copy_variancex0,copy_injectivityx1)))pci_params;Ast_501.Parsetree.pci_name=copy_loc(funx->x)pci_name;Ast_501.Parsetree.pci_expr=f0pci_expr;Ast_501.Parsetree.pci_loc=copy_locationpci_loc;Ast_501.Parsetree.pci_attributes=copy_attributespci_attributes;}andcopy_virtual_flag:Ast_500.Asttypes.virtual_flag ->Ast_501.Asttypes.virtual_flag =function|Ast_500.Asttypes.Virtual->Ast_501.Asttypes.Virtual|Ast_500.Asttypes.Concrete->Ast_501.Asttypes.Concreteandcopy_include_description:Ast_500.Parsetree.include_description->Ast_501.Parsetree.include_description=funx->copy_include_infoscopy_module_typexandcopy_include_infos:'f0'g0.('f0->'g0)->'f0Ast_500.Parsetree.include_infos->'g0Ast_501.Parsetree.include_infos=funf0{Ast_500.Parsetree.pincl_mod;Ast_500.Parsetree.pincl_loc;Ast_500.Parsetree.pincl_attributes;}->{Ast_501.Parsetree.pincl_mod=f0pincl_mod;Ast_501.Parsetree.pincl_loc =copy_locationpincl_loc;Ast_501.Parsetree.pincl_attributes =copy_attributespincl_attributes;}andcopy_open_description:Ast_500.Parsetree.open_description->Ast_501.Parsetree.open_description=funx->copy_open_infos(funx->copy_loccopy_Longident_tx)xandcopy_open_infos:'f0'g0.('f0->'g0)->'f0Ast_500.Parsetree.open_infos->'g0Ast_501.Parsetree.open_infos=funf0{Ast_500.Parsetree.popen_expr;Ast_500.Parsetree.popen_override;Ast_500.Parsetree.popen_loc;Ast_500.Parsetree.popen_attributes;}->{Ast_501.Parsetree.popen_expr=f0popen_expr;Ast_501.Parsetree.popen_override=copy_override_flagpopen_override;Ast_501.Parsetree.popen_loc=copy_locationpopen_loc;Ast_501.Parsetree.popen_attributes =copy_attributespopen_attributes;}andcopy_override_flag:Ast_500.Asttypes.override_flag ->Ast_501.Asttypes.override_flag=function|Ast_500.Asttypes.Override->Ast_501.Asttypes.Override|Ast_500.Asttypes.Fresh->Ast_501.Asttypes.Freshandcopy_module_type_declaration:Ast_500.Parsetree.module_type_declaration ->Ast_501.Parsetree.module_type_declaration =fun{Ast_500.Parsetree.pmtd_name;Ast_500.Parsetree.pmtd_type;Ast_500.Parsetree.pmtd_attributes;Ast_500.Parsetree.pmtd_loc;}->{Ast_501.Parsetree.pmtd_name=copy_loc(funx->x)pmtd_name;Ast_501.Parsetree.pmtd_type =Option.mapcopy_module_typepmtd_type;Ast_501.Parsetree.pmtd_attributes =copy_attributespmtd_attributes;Ast_501.Parsetree.pmtd_loc=copy_locationpmtd_loc;}andcopy_module_substitution:Ast_500.Parsetree.module_substitution->Ast_501.Parsetree.module_substitution=fun{Ast_500.Parsetree.pms_name;Ast_500.Parsetree.pms_manifest;Ast_500.Parsetree.pms_attributes;Ast_500.Parsetree.pms_loc;}->{Ast_501.Parsetree.pms_name=copy_loc(funx->x)pms_name;Ast_501.Parsetree.pms_manifest=copy_loccopy_Longident_tpms_manifest;Ast_501.Parsetree.pms_attributes=copy_attributespms_attributes;Ast_501.Parsetree.pms_loc=copy_locationpms_loc;}andcopy_module_declaration:Ast_500.Parsetree.module_declaration->Ast_501.Parsetree.module_declaration=fun{Ast_500.Parsetree.pmd_name;Ast_500.Parsetree.pmd_type;Ast_500.Parsetree.pmd_attributes;Ast_500.Parsetree.pmd_loc;}->{Ast_501.Parsetree.pmd_name=copy_loc(funx->Option.map(funx->x)x)pmd_name;Ast_501.Parsetree.pmd_type=copy_module_typepmd_type;Ast_501.Parsetree.pmd_attributes=copy_attributespmd_attributes;Ast_501.Parsetree.pmd_loc=copy_locationpmd_loc;}andcopy_type_exception:Ast_500.Parsetree.type_exception->Ast_501.Parsetree.type_exception=fun{Ast_500.Parsetree.ptyexn_constructor;Ast_500.Parsetree.ptyexn_loc;Ast_500.Parsetree.ptyexn_attributes;}->{Ast_501.Parsetree.ptyexn_constructor=copy_extension_constructorptyexn_constructor;Ast_501.Parsetree.ptyexn_loc =copy_locationptyexn_loc;Ast_501.Parsetree.ptyexn_attributes=copy_attributesptyexn_attributes;}andcopy_type_extension:Ast_500.Parsetree.type_extension->Ast_501.Parsetree.type_extension=fun{Ast_500.Parsetree.ptyext_path;Ast_500.Parsetree.ptyext_params;Ast_500.Parsetree.ptyext_constructors;Ast_500.Parsetree.ptyext_private;Ast_500.Parsetree.ptyext_loc;Ast_500.Parsetree.ptyext_attributes;}->{Ast_501.Parsetree.ptyext_path=copy_loccopy_Longident_tptyext_path;Ast_501.Parsetree.ptyext_params=List.map(funx->letx0,x1=xin(copy_core_typex0,letx0,x1=x1in(copy_variancex0,copy_injectivityx1)))ptyext_params;Ast_501.Parsetree.ptyext_constructors=List.mapcopy_extension_constructorptyext_constructors;Ast_501.Parsetree.ptyext_private =copy_private_flagptyext_private;Ast_501.Parsetree.ptyext_loc=copy_locationptyext_loc;Ast_501.Parsetree.ptyext_attributes=copy_attributesptyext_attributes;}andcopy_extension_constructor:Ast_500.Parsetree.extension_constructor ->Ast_501.Parsetree.extension_constructor =fun{Ast_500.Parsetree.pext_name;Ast_500.Parsetree.pext_kind;Ast_500.Parsetree.pext_loc;Ast_500.Parsetree.pext_attributes;}->{Ast_501.Parsetree.pext_name=copy_loc(funx->x)pext_name;Ast_501.Parsetree.pext_kind =copy_extension_constructor_kindpext_kind;Ast_501.Parsetree.pext_loc=copy_locationpext_loc;Ast_501.Parsetree.pext_attributes=copy_attributespext_attributes;}andcopy_extension_constructor_kind:Ast_500.Parsetree.extension_constructor_kind ->Ast_501.Parsetree.extension_constructor_kind =function|Ast_500.Parsetree.Pext_decl(x0,x1,x2)->Ast_501.Parsetree.Pext_decl(List.map(funx->copy_loc(funx->x)x)x0,copy_constructor_argumentsx1,Option.mapcopy_core_typex2)|Ast_500.Parsetree.Pext_rebindx0->Ast_501.Parsetree.Pext_rebind(copy_loccopy_Longident_tx0)andcopy_type_declaration:Ast_500.Parsetree.type_declaration->Ast_501.Parsetree.type_declaration=fun{Ast_500.Parsetree.ptype_name;Ast_500.Parsetree.ptype_params;Ast_500.Parsetree.ptype_cstrs;Ast_500.Parsetree.ptype_kind;Ast_500.Parsetree.ptype_private;Ast_500.Parsetree.ptype_manifest;Ast_500.Parsetree.ptype_attributes;Ast_500.Parsetree.ptype_loc;}->{Ast_501.Parsetree.ptype_name=copy_loc(funx->x)ptype_name;Ast_501.Parsetree.ptype_params=List.map(funx->letx0,x1=xin(copy_core_typex0,letx0,x1=x1in(copy_variancex0,copy_injectivityx1)))ptype_params;Ast_501.Parsetree.ptype_cstrs=List.map(funx->letx0,x1,x2=xin(copy_core_typex0,copy_core_typex1,copy_locationx2))ptype_cstrs;Ast_501.Parsetree.ptype_kind=copy_type_kindptype_kind;Ast_501.Parsetree.ptype_private=copy_private_flagptype_private;Ast_501.Parsetree.ptype_manifest=Option.mapcopy_core_typeptype_manifest;Ast_501.Parsetree.ptype_attributes=copy_attributesptype_attributes;Ast_501.Parsetree.ptype_loc=copy_locationptype_loc;}andcopy_private_flag:Ast_500.Asttypes.private_flag ->Ast_501.Asttypes.private_flag =function|Ast_500.Asttypes.Private->Ast_501.Asttypes.Private|Ast_500.Asttypes.Public->Ast_501.Asttypes.Publicandcopy_type_kind:Ast_500.Parsetree.type_kind->Ast_501.Parsetree.type_kind=function|Ast_500.Parsetree.Ptype_abstract->Ast_501.Parsetree.Ptype_abstract|Ast_500.Parsetree.Ptype_variantx0->Ast_501.Parsetree.Ptype_variant(List.mapcopy_constructor_declarationx0)|Ast_500.Parsetree.Ptype_recordx0->Ast_501.Parsetree.Ptype_record(List.mapcopy_label_declarationx0)|Ast_500.Parsetree.Ptype_open->Ast_501.Parsetree.Ptype_openandcopy_constructor_declaration:Ast_500.Parsetree.constructor_declaration ->Ast_501.Parsetree.constructor_declaration =fun{Ast_500.Parsetree.pcd_name;Ast_500.Parsetree.pcd_vars;Ast_500.Parsetree.pcd_args;Ast_500.Parsetree.pcd_res;Ast_500.Parsetree.pcd_loc;Ast_500.Parsetree.pcd_attributes;}->{Ast_501.Parsetree.pcd_name=copy_loc(funx->x)pcd_name;Ast_501.Parsetree.pcd_vars=List.map(funx->copy_loc(funx->x)x)pcd_vars;Ast_501.Parsetree.pcd_args=copy_constructor_argumentspcd_args;Ast_501.Parsetree.pcd_res=Option.mapcopy_core_typepcd_res;Ast_501.Parsetree.pcd_loc=copy_locationpcd_loc;Ast_501.Parsetree.pcd_attributes=copy_attributespcd_attributes;}andcopy_constructor_arguments:Ast_500.Parsetree.constructor_arguments ->Ast_501.Parsetree.constructor_arguments =function|Ast_500.Parsetree.Pcstr_tuplex0->Ast_501.Parsetree.Pcstr_tuple(List.mapcopy_core_typex0)|Ast_500.Parsetree.Pcstr_recordx0->Ast_501.Parsetree.Pcstr_record(List.mapcopy_label_declarationx0)andcopy_label_declaration:Ast_500.Parsetree.label_declaration->Ast_501.Parsetree.label_declaration=fun{Ast_500.Parsetree.pld_name;Ast_500.Parsetree.pld_mutable;Ast_500.Parsetree.pld_type;Ast_500.Parsetree.pld_loc;Ast_500.Parsetree.pld_attributes;}->{Ast_501.Parsetree.pld_name=copy_loc(funx->x)pld_name;Ast_501.Parsetree.pld_mutable=copy_mutable_flagpld_mutable;Ast_501.Parsetree.pld_type=copy_core_typepld_type;Ast_501.Parsetree.pld_loc=copy_locationpld_loc;Ast_501.Parsetree.pld_attributes=copy_attributespld_attributes;}andcopy_mutable_flag:Ast_500.Asttypes.mutable_flag ->Ast_501.Asttypes.mutable_flag =function|Ast_500.Asttypes.Immutable->Ast_501.Asttypes.Immutable|Ast_500.Asttypes.Mutable->Ast_501.Asttypes.Mutableandcopy_injectivity:Ast_500.Asttypes.injectivity->Ast_501.Asttypes.injectivity=function|Ast_500.Asttypes.Injective->Ast_501.Asttypes.Injective|Ast_500.Asttypes.NoInjectivity->Ast_501.Asttypes.NoInjectivityandcopy_variance:Ast_500.Asttypes.variance->Ast_501.Asttypes.variance=function|Ast_500.Asttypes.Covariant->Ast_501.Asttypes.Covariant|Ast_500.Asttypes.Contravariant->Ast_501.Asttypes.Contravariant|Ast_500.Asttypes.NoVariance->Ast_501.Asttypes.NoVarianceandcopy_value_description:Ast_500.Parsetree.value_description->Ast_501.Parsetree.value_description=fun{Ast_500.Parsetree.pval_name;Ast_500.Parsetree.pval_type;Ast_500.Parsetree.pval_prim;Ast_500.Parsetree.pval_attributes;Ast_500.Parsetree.pval_loc;}->{Ast_501.Parsetree.pval_name=copy_loc(funx->x)pval_name;Ast_501.Parsetree.pval_type =copy_core_typepval_type;Ast_501.Parsetree.pval_prim =List.map(funx->x)pval_prim;Ast_501.Parsetree.pval_attributes =copy_attributespval_attributes;Ast_501.Parsetree.pval_loc=copy_locationpval_loc;}andcopy_object_field_desc:Ast_500.Parsetree.object_field_desc->Ast_501.Parsetree.object_field_desc=function|Ast_500.Parsetree.Otag(x0,x1)->Ast_501.Parsetree.Otag(copy_loccopy_labelx0,copy_core_typex1)|Ast_500.Parsetree.Oinheritx0->Ast_501.Parsetree.Oinherit(copy_core_typex0)andcopy_arg_label:Ast_500.Asttypes.arg_label->Ast_501.Asttypes.arg_label=function|Ast_500.Asttypes.Nolabel->Ast_501.Asttypes.Nolabel|Ast_500.Asttypes.Labelledx0->Ast_501.Asttypes.Labelledx0|Ast_500.Asttypes.Optionalx0 ->Ast_501.Asttypes.Optionalx0andcopy_closed_flag:Ast_500.Asttypes.closed_flag->Ast_501.Asttypes.closed_flag=function|Ast_500.Asttypes.Closed->Ast_501.Asttypes.Closed|Ast_500.Asttypes.Open->Ast_501.Asttypes.Openandcopy_label:Ast_500.Asttypes.label->Ast_501.Asttypes.label=funx->xandcopy_rec_flag:Ast_500.Asttypes.rec_flag->Ast_501.Asttypes.rec_flag=function|Ast_500.Asttypes.Nonrecursive->Ast_501.Asttypes.Nonrecursive|Ast_500.Asttypes.Recursive->Ast_501.Asttypes.Recursiveandcopy_constant:Ast_500.Parsetree.constant->Ast_501.Parsetree.constant=function|Ast_500.Parsetree.Pconst_integer(x0,x1)->Ast_501.Parsetree.Pconst_integer(x0,Option.map(funx->x)x1)|Ast_500.Parsetree.Pconst_charx0->Ast_501.Parsetree.Pconst_charx0|Ast_500.Parsetree.Pconst_string(x0,x1,x2)->Ast_501.Parsetree.Pconst_string(x0,copy_locationx1,Option.map(funx->x)x2)|Ast_500.Parsetree.Pconst_float(x0,x1)->Ast_501.Parsetree.Pconst_float(x0,Option.map(funx->x)x1)andcopy_Longident_t:Longident.t->Longident.t=function|Longident.Lidentx0->Longident.Lidentx0|Longident.Ldot(x0,x1)->Longident.Ldot(copy_Longident_tx0,x1)|Longident.Lapply(x0,x1)->Longident.Lapply(copy_Longident_tx0,copy_Longident_tx1)andcopy_loc:'f0'g0.('f0->'g0)->'f0Ast_500.Asttypes.loc->'g0Ast_501.Asttypes.loc=funf0{Ast_500.Asttypes.txt;Ast_500.Asttypes.loc}->{Ast_501.Asttypes.txt=f0txt;Ast_501.Asttypes.loc=copy_locationloc}andcopy_location:Location.t->Location.t=fun{Location.loc_start;Location.loc_end;Location.loc_ghost}->{Location.loc_start=copy_positionloc_start;Location.loc_end=copy_position loc_end;Location.loc_ghost;}and copy_position:Lexing.position->Lexing.position =fun{Lexing.pos_fname;Lexing.pos_lnum;Lexing.pos_bol;Lexing.pos_cnum }->{Lexing.pos_fname;Lexing.pos_lnum;Lexing.pos_bol;Lexing.pos_cnum }