123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420moduleFrom=Ast_54moduleTo=Ast_53letrec(copy_out_type_extension:Ast_54.Outcometree.out_type_extension->Ast_53.Outcometree.out_type_extension)=fun{Ast_54.Outcometree.otyext_name=otyext_name;Ast_54.Outcometree.otyext_params=otyext_params;Ast_54.Outcometree.otyext_constructors=otyext_constructors;Ast_54.Outcometree.otyext_private=otyext_private}->{Ast_53.Outcometree.otyext_name=otyext_name;Ast_53.Outcometree.otyext_params=(List.map(funx->x)otyext_params);Ast_53.Outcometree.otyext_constructors=(List.map(funx->copy_out_constructorx)otyext_constructors);Ast_53.Outcometree.otyext_private=(copy_private_flagotyext_private)}and(copy_out_phrase:Ast_54.Outcometree.out_phrase->Ast_53.Outcometree.out_phrase)=function|Ast_54.Outcometree.Ophr_eval(x0,x1)->Ast_53.Outcometree.Ophr_eval((copy_out_valuex0),(copy_out_typex1))|Ast_54.Outcometree.Ophr_signaturex0->Ast_53.Outcometree.Ophr_signature(List.map(funx->let(x0,x1)=xin((copy_out_sig_itemx0),(Option.map(funx->copy_out_valuex)x1)))x0)|Ast_54.Outcometree.Ophr_exceptionx0->Ast_53.Outcometree.Ophr_exception(let(x0,x1)=x0in(x0,(copy_out_valuex1)))and(copy_out_sig_item:Ast_54.Outcometree.out_sig_item->Ast_53.Outcometree.out_sig_item)=function|Ast_54.Outcometree.Osig_class(x0,x1,x2,x3,x4)->Ast_53.Outcometree.Osig_class(x0,x1,(List.map(funx->copy_out_type_paramx)x2),(copy_out_class_typex3),(copy_out_rec_statusx4))|Ast_54.Outcometree.Osig_class_type(x0,x1,x2,x3,x4)->Ast_53.Outcometree.Osig_class_type(x0,x1,(List.map(funx->copy_out_type_paramx)x2),(copy_out_class_typex3),(copy_out_rec_statusx4))|Ast_54.Outcometree.Osig_typext(x0,x1)->Ast_53.Outcometree.Osig_typext((copy_out_extension_constructorx0),(copy_out_ext_statusx1))|Ast_54.Outcometree.Osig_modtype(x0,x1)->Ast_53.Outcometree.Osig_modtype(x0,(copy_out_module_typex1))|Ast_54.Outcometree.Osig_module(x0,x1,x2)->Ast_53.Outcometree.Osig_module(x0,(copy_out_module_typex1),(copy_out_rec_statusx2))|Ast_54.Outcometree.Osig_type(x0,x1)->Ast_53.Outcometree.Osig_type((copy_out_type_declx0),(copy_out_rec_statusx1))|Ast_54.Outcometree.Osig_valuex0->Ast_53.Outcometree.Osig_value(copy_out_val_declx0)|Ast_54.Outcometree.Osig_ellipsis->Ast_53.Outcometree.Osig_ellipsisand(copy_out_val_decl:Ast_54.Outcometree.out_val_decl->Ast_53.Outcometree.out_val_decl)=fun{Ast_54.Outcometree.oval_name=oval_name;Ast_54.Outcometree.oval_type=oval_type;Ast_54.Outcometree.oval_prims=oval_prims;Ast_54.Outcometree.oval_attributes=oval_attributes}->{Ast_53.Outcometree.oval_name=oval_name;Ast_53.Outcometree.oval_type=(copy_out_typeoval_type);Ast_53.Outcometree.oval_prims=(List.map(funx->x)oval_prims);Ast_53.Outcometree.oval_attributes=(List.map(funx->copy_out_attributex)oval_attributes)}and(copy_out_type_decl:Ast_54.Outcometree.out_type_decl->Ast_53.Outcometree.out_type_decl)=fun{Ast_54.Outcometree.otype_name=otype_name;Ast_54.Outcometree.otype_params=otype_params;Ast_54.Outcometree.otype_type=otype_type;Ast_54.Outcometree.otype_private=otype_private;Ast_54.Outcometree.otype_immediate=otype_immediate;Ast_54.Outcometree.otype_unboxed=otype_unboxed;Ast_54.Outcometree.otype_cstrs=otype_cstrs}->{Ast_53.Outcometree.otype_name=otype_name;Ast_53.Outcometree.otype_params=(List.map(funx->copy_out_type_paramx)otype_params);Ast_53.Outcometree.otype_type=(copy_out_typeotype_type);Ast_53.Outcometree.otype_private=(copy_private_flagotype_private);Ast_53.Outcometree.otype_immediate=(copy_Type_immediacy_totype_immediate);Ast_53.Outcometree.otype_unboxed=otype_unboxed;Ast_53.Outcometree.otype_cstrs=(List.map(funx->let(x0,x1)=xin((copy_out_typex0),(copy_out_typex1)))otype_cstrs)}and(copy_Type_immediacy_t:Ast_54.Type_immediacy.t->Ast_53.Type_immediacy.t)=function|Ast_54.Type_immediacy.Unknown->Ast_53.Type_immediacy.Unknown|Ast_54.Type_immediacy.Always->Ast_53.Type_immediacy.Always|Ast_54.Type_immediacy.Always_on_64bits->Ast_53.Type_immediacy.Always_on_64bitsand(copy_out_module_type:Ast_54.Outcometree.out_module_type->Ast_53.Outcometree.out_module_type)=function|Ast_54.Outcometree.Omty_abstract->Ast_53.Outcometree.Omty_abstract|Ast_54.Outcometree.Omty_functor(x0,x1)->Ast_53.Outcometree.Omty_functor((Option.map(funx->let(x0,x1)=xin((Option.map(funx->x)x0),(copy_out_module_typex1)))x0),(copy_out_module_typex1))|Ast_54.Outcometree.Omty_identx0->Ast_53.Outcometree.Omty_ident(copy_out_identx0)|Ast_54.Outcometree.Omty_signaturex0->Ast_53.Outcometree.Omty_signature(List.map(funx->copy_out_sig_itemx)x0)|Ast_54.Outcometree.Omty_aliasx0->Ast_53.Outcometree.Omty_alias(copy_out_identx0)and(copy_out_ext_status:Ast_54.Outcometree.out_ext_status->Ast_53.Outcometree.out_ext_status)=function|Ast_54.Outcometree.Oext_first->Ast_53.Outcometree.Oext_first|Ast_54.Outcometree.Oext_next->Ast_53.Outcometree.Oext_next|Ast_54.Outcometree.Oext_exception->Ast_53.Outcometree.Oext_exceptionand(copy_out_extension_constructor:Ast_54.Outcometree.out_extension_constructor->Ast_53.Outcometree.out_extension_constructor)=fun{Ast_54.Outcometree.oext_name=oext_name;Ast_54.Outcometree.oext_type_name=oext_type_name;Ast_54.Outcometree.oext_type_params=oext_type_params;Ast_54.Outcometree.oext_args=oext_args;Ast_54.Outcometree.oext_ret_type=oext_ret_type;Ast_54.Outcometree.oext_private=oext_private}->{Ast_53.Outcometree.oext_name=oext_name;Ast_53.Outcometree.oext_type_name=oext_type_name;Ast_53.Outcometree.oext_type_params=(List.map(funx->x)oext_type_params);Ast_53.Outcometree.oext_args=(List.map(funx->copy_out_typex)oext_args);Ast_53.Outcometree.oext_ret_type=(Option.map(funx->copy_out_typex)oext_ret_type);Ast_53.Outcometree.oext_private=(copy_private_flagoext_private)}and(copy_private_flag:Ast_54.Asttypes.private_flag->Ast_53.Asttypes.private_flag)=function|Ast_54.Asttypes.Private->Ast_53.Asttypes.Private|Ast_54.Asttypes.Public->Ast_53.Asttypes.Publicand(copy_out_rec_status:Ast_54.Outcometree.out_rec_status->Ast_53.Outcometree.out_rec_status)=function|Ast_54.Outcometree.Orec_not->Ast_53.Outcometree.Orec_not|Ast_54.Outcometree.Orec_first->Ast_53.Outcometree.Orec_first|Ast_54.Outcometree.Orec_next->Ast_53.Outcometree.Orec_nextand(copy_out_class_type:Ast_54.Outcometree.out_class_type->Ast_53.Outcometree.out_class_type)=function|Ast_54.Outcometree.Octy_constr(x0,x1)->Ast_53.Outcometree.Octy_constr((copy_out_identx0),(List.map(funx->copy_out_typex)x1))|Ast_54.Outcometree.Octy_arrow(x0,x1,x2)->Ast_53.Outcometree.Octy_arrow((copy_arg_labelx0),(copy_out_typex1),(copy_out_class_typex2))|Ast_54.Outcometree.Octy_signature(x0,x1)->Ast_53.Outcometree.Octy_signature((Option.map(funx->copy_out_typex)x0),(List.map(funx->copy_out_class_sig_itemx)x1))and(copy_out_class_sig_item:Ast_54.Outcometree.out_class_sig_item->Ast_53.Outcometree.out_class_sig_item)=function|Ast_54.Outcometree.Ocsg_constraint(x0,x1)->Ast_53.Outcometree.Ocsg_constraint((copy_out_typex0),(copy_out_typex1))|Ast_54.Outcometree.Ocsg_method(x0,x1,x2,x3)->Ast_53.Outcometree.Ocsg_method(x0,x1,x2,(copy_out_typex3))|Ast_54.Outcometree.Ocsg_value(x0,x1,x2,x3)->Ast_53.Outcometree.Ocsg_value(x0,x1,x2,(copy_out_typex3))and(copy_out_type_param:Ast_54.Outcometree.out_type_param->Ast_53.Outcometree.out_type_param)=fun{Ast_54.Outcometree.ot_non_gen=ot_non_gen;Ast_54.Outcometree.ot_name=ot_name;Ast_54.Outcometree.ot_variance=ot_variance}->{Ast_53.Outcometree.ot_non_gen=ot_non_gen;Ast_53.Outcometree.ot_name=ot_name;Ast_53.Outcometree.ot_variance=(let(x0,x1)=ot_variancein((copy_variancex0),(copy_injectivityx1)))}and(copy_injectivity:Ast_54.Asttypes.injectivity->Ast_53.Asttypes.injectivity)=function|Ast_54.Asttypes.Injective->Ast_53.Asttypes.Injective|Ast_54.Asttypes.NoInjectivity->Ast_53.Asttypes.NoInjectivityand(copy_variance:Ast_54.Asttypes.variance->Ast_53.Asttypes.variance)=function|Ast_54.Asttypes.Covariant->Ast_53.Asttypes.Covariant|Ast_54.Asttypes.Contravariant->Ast_53.Asttypes.Contravariant|Ast_54.Asttypes.NoVariance->Ast_53.Asttypes.NoVariance|Ast_54.Asttypes.Bivariant->(* TODO(anmonteiro): this is likely not correct? *)Ast_53.Asttypes.NoVarianceand(copy_out_type:Ast_54.Outcometree.out_type->Ast_53.Outcometree.out_type)=function|Ast_54.Outcometree.Otyp_abstract->Ast_53.Outcometree.Otyp_abstract|Ast_54.Outcometree.Otyp_open->Ast_53.Outcometree.Otyp_open|Ast_54.Outcometree.Otyp_alias{non_gen;aliased;alias}->Ast_53.Outcometree.Otyp_alias{non_gen;aliased=(copy_out_typealiased);alias}|Ast_54.Outcometree.Otyp_arrow(x0,x1,x2)->Ast_53.Outcometree.Otyp_arrow((copy_arg_labelx0),(copy_out_typex1),(copy_out_typex2))|Ast_54.Outcometree.Otyp_class(x0,x1)->Ast_53.Outcometree.Otyp_class((copy_out_identx0),(List.map(funx->copy_out_typex)x1))|Ast_54.Outcometree.Otyp_constr(x0,x1)->Ast_53.Outcometree.Otyp_constr((copy_out_identx0),(List.map(funx->copy_out_typex)x1))|Ast_54.Outcometree.Otyp_manifest(x0,x1)->Ast_53.Outcometree.Otyp_manifest((copy_out_typex0),(copy_out_typex1))|Ast_54.Outcometree.Otyp_object{fields;open_row}->Ast_53.Outcometree.Otyp_object{fields=((List.map(funx->let(x0,x1)=xin(x0,(copy_out_typex1)))fields));open_row}|Ast_54.Outcometree.Otyp_recordx0->Ast_53.Outcometree.Otyp_record(List.map(funx->copy_out_labelx)x0)|Ast_54.Outcometree.Otyp_stuffx0->Ast_53.Outcometree.Otyp_stuffx0|Ast_54.Outcometree.Otyp_sumx0->Ast_53.Outcometree.Otyp_sum(List.map(funx->copy_out_constructorx)x0)|Ast_54.Outcometree.Otyp_tuplex0->Ast_53.Outcometree.Otyp_tuple(List.map(funx->let(_x0,x1)=xin(copy_out_typex1))x0)|Ast_54.Outcometree.Otyp_var(x0,x1)->Ast_53.Outcometree.Otyp_var(x0,x1)|Ast_54.Outcometree.Otyp_variant(x0,x1,x2)->Ast_53.Outcometree.Otyp_variant((copy_out_variantx0),x1,(Option.map(funx->List.map(funx->x)x)x2))|Ast_54.Outcometree.Otyp_poly(x0,x1)->Ast_53.Outcometree.Otyp_poly((List.map(funx->x)x0),(copy_out_typex1))|Ast_54.Outcometree.Otyp_module{Ast_54.Outcometree.opack_path=opack_path;Ast_54.Outcometree.opack_cstrs=opack_cstrs}->Ast_53.Outcometree.Otyp_module((copy_out_identopack_path),(List.map(funx->let(x0,x1)=xin(x0,(copy_out_typex1)))opack_cstrs))|Ast_54.Outcometree.Otyp_attribute(x0,x1)->Ast_53.Outcometree.Otyp_attribute((copy_out_typex0),(copy_out_attributex1))and(copy_out_attribute:Ast_54.Outcometree.out_attribute->Ast_53.Outcometree.out_attribute)=fun{Ast_54.Outcometree.oattr_name=oattr_name}->{Ast_53.Outcometree.oattr_name=oattr_name}and(copy_out_variant:Ast_54.Outcometree.out_variant->Ast_53.Outcometree.out_variant)=function|Ast_54.Outcometree.Ovar_fieldsx0->Ast_53.Outcometree.Ovar_fields(List.map(funx->let(x0,x1,x2)=xin(x0,x1,(List.map(funx->copy_out_typex)x2)))x0)|Ast_54.Outcometree.Ovar_typx0->Ast_53.Outcometree.Ovar_typ(copy_out_typex0)and(copy_out_constructor:Ast_54.Outcometree.out_constructor->Ast_53.Outcometree.out_constructor)=fun{Ast_54.Outcometree.ocstr_name=ocstr_name;Ast_54.Outcometree.ocstr_args=ocstr_args;Ast_54.Outcometree.ocstr_return_type=ocstr_return_type}->{Ast_53.Outcometree.ocstr_name=ocstr_name;Ast_53.Outcometree.ocstr_args=(List.map(funx->copy_out_typex)ocstr_args);Ast_53.Outcometree.ocstr_return_type=(Option.map(funx->copy_out_typex)ocstr_return_type)}and(copy_out_label:Ast_54.Outcometree.out_label->Ast_53.Outcometree.out_label)=fun{Ast_54.Outcometree.olab_name=olab_name;Ast_54.Outcometree.olab_mut=olab_mut;Ast_54.Outcometree.olab_atomic=_;Ast_54.Outcometree.olab_type=olab_type}->{Ast_53.Outcometree.olab_name=olab_name;Ast_53.Outcometree.olab_mut=(copy_mutable_flagolab_mut);Ast_53.Outcometree.olab_type=(copy_out_typeolab_type)}and(copy_arg_label:Ast_54.Asttypes.arg_label->Ast_53.Asttypes.arg_label)=function|Ast_54.Asttypes.Nolabel->Ast_53.Asttypes.Nolabel|Ast_54.Asttypes.Labelledx0->Ast_53.Asttypes.Labelledx0|Ast_54.Asttypes.Optionalx0->Ast_53.Asttypes.Optionalx0and(copy_out_value:Ast_54.Outcometree.out_value->Ast_53.Outcometree.out_value)=function|Ast_54.Outcometree.Oval_array(x0,_x1)->Ast_53.Outcometree.Oval_array((List.map(funx->copy_out_valuex)x0))|Ast_54.Outcometree.Oval_charx0->Ast_53.Outcometree.Oval_charx0|Ast_54.Outcometree.Oval_constr(x0,x1)->Ast_53.Outcometree.Oval_constr((copy_out_identx0),(List.map(funx->copy_out_valuex)x1))|Ast_54.Outcometree.Oval_ellipsis->Ast_53.Outcometree.Oval_ellipsis|Ast_54.Outcometree.Oval_floatx0->Ast_53.Outcometree.Oval_floatx0|Ast_54.Outcometree.Oval_intx0->Ast_53.Outcometree.Oval_intx0|Ast_54.Outcometree.Oval_int32x0->Ast_53.Outcometree.Oval_int32x0|Ast_54.Outcometree.Oval_int64x0->Ast_53.Outcometree.Oval_int64x0|Ast_54.Outcometree.Oval_nativeintx0->Ast_53.Outcometree.Oval_nativeintx0|Ast_54.Outcometree.Oval_listx0->Ast_53.Outcometree.Oval_list(List.map(funx->copy_out_valuex)x0)|Ast_54.Outcometree.Oval_printerx0->Ast_53.Outcometree.Oval_printerx0|Ast_54.Outcometree.Oval_recordx0->Ast_53.Outcometree.Oval_record(List.map(funx->let(x0,x1)=xin((copy_out_identx0),(copy_out_valuex1)))x0)|Ast_54.Outcometree.Oval_string(x0,x1,x2)->Ast_53.Outcometree.Oval_string(x0,x1,(copy_out_stringx2))|Ast_54.Outcometree.Oval_stuffx0->Ast_53.Outcometree.Oval_stuffx0|Ast_54.Outcometree.Oval_tuplex0->Ast_53.Outcometree.Oval_tuple(List.map(funx->let(_x0,x1)=xin(copy_out_valuex1))x0)|Ast_54.Outcometree.Oval_variant(x0,x1)->Ast_53.Outcometree.Oval_variant(x0,(Option.map(funx->copy_out_valuex)x1))|Ast_54.Outcometree.Oval_lazyx0->Ast_53.Outcometree.Oval_lazy(copy_out_valuex0)|Ast_54.Outcometree.Oval_floatarrayx0->letmigratex0accn=matchnwith|0->acc|i->Ast_53.Outcometree.Oval_float(Array.Floatarray.getx0(i-1))::accinAst_53.Outcometree.Oval_array(migratex0[](Array.Floatarray.lengthx0))and(copy_out_string:Ast_54.Outcometree.out_string->Ast_53.Outcometree.out_string)=function|Ast_54.Outcometree.Ostr_string->Ast_53.Outcometree.Ostr_string|Ast_54.Outcometree.Ostr_bytes->Ast_53.Outcometree.Ostr_bytesand(copy_out_ident:Ast_54.Outcometree.out_ident->Ast_53.Outcometree.out_ident)=function|Ast_54.Outcometree.Oide_apply(x0,x1)->Ast_53.Outcometree.Oide_apply((copy_out_identx0),(copy_out_identx1))|Ast_54.Outcometree.Oide_dot(x0,x1)->Ast_53.Outcometree.Oide_dot((copy_out_identx0),x1)|Ast_54.Outcometree.Oide_identx0->Ast_53.Outcometree.Oide_ident(copy_out_namex0)and(copy_out_name:Ast_54.Outcometree.out_name->Ast_53.Outcometree.out_name)=fun{Ast_54.Outcometree.printed_name=printed_name}->{Ast_53.Outcometree.printed_name=printed_name}and(copy_mutable_flag:Ast_54.Asttypes.mutable_flag->Ast_53.Asttypes.mutable_flag)=function|Ast_54.Asttypes.Immutable->Ast_53.Asttypes.Immutable|Ast_54.Asttypes.Mutable->Ast_53.Asttypes.Mutable