123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334openStdlib0moduleFrom=Ast_412moduleTo=Ast_411letreccopy_out_type_extension:Ast_412.Outcometree.out_type_extension->Ast_411.Outcometree.out_type_extension=fun{Ast_412.Outcometree.otyext_name=otyext_name;Ast_412.Outcometree.otyext_params=otyext_params;Ast_412.Outcometree.otyext_constructors=otyext_constructors;Ast_412.Outcometree.otyext_private=otyext_private}->{Ast_411.Outcometree.otyext_name=otyext_name;Ast_411.Outcometree.otyext_params=(List.map(funx->x)otyext_params);Ast_411.Outcometree.otyext_constructors=(List.map(funx->let(x0,x1,x2)=xin(x0,(List.mapcopy_out_typex1),(Option.mapcopy_out_typex2)))otyext_constructors);Ast_411.Outcometree.otyext_private=(copy_private_flagotyext_private)}andcopy_out_phrase:Ast_412.Outcometree.out_phrase->Ast_411.Outcometree.out_phrase=function|Ast_412.Outcometree.Ophr_eval(x0,x1)->Ast_411.Outcometree.Ophr_eval((copy_out_valuex0),(copy_out_typex1))|Ast_412.Outcometree.Ophr_signaturex0->Ast_411.Outcometree.Ophr_signature(List.map(funx->let(x0,x1)=xin((copy_out_sig_itemx0),(Option.mapcopy_out_valuex1)))x0)|Ast_412.Outcometree.Ophr_exceptionx0->Ast_411.Outcometree.Ophr_exception(let(x0,x1)=x0in(x0,(copy_out_valuex1)))andcopy_out_sig_item:Ast_412.Outcometree.out_sig_item->Ast_411.Outcometree.out_sig_item=function|Ast_412.Outcometree.Osig_class(x0,x1,x2,x3,x4)->Ast_411.Outcometree.Osig_class(x0,x1,(List.mapcopy_out_type_paramx2),(copy_out_class_typex3),(copy_out_rec_statusx4))|Ast_412.Outcometree.Osig_class_type(x0,x1,x2,x3,x4)->Ast_411.Outcometree.Osig_class_type(x0,x1,(List.mapcopy_out_type_paramx2),(copy_out_class_typex3),(copy_out_rec_statusx4))|Ast_412.Outcometree.Osig_typext(x0,x1)->Ast_411.Outcometree.Osig_typext((copy_out_extension_constructorx0),(copy_out_ext_statusx1))|Ast_412.Outcometree.Osig_modtype(x0,x1)->Ast_411.Outcometree.Osig_modtype(x0,(copy_out_module_typex1))|Ast_412.Outcometree.Osig_module(x0,x1,x2)->Ast_411.Outcometree.Osig_module(x0,(copy_out_module_typex1),(copy_out_rec_statusx2))|Ast_412.Outcometree.Osig_type(x0,x1)->Ast_411.Outcometree.Osig_type((copy_out_type_declx0),(copy_out_rec_statusx1))|Ast_412.Outcometree.Osig_valuex0->Ast_411.Outcometree.Osig_value(copy_out_val_declx0)|Ast_412.Outcometree.Osig_ellipsis->Ast_411.Outcometree.Osig_ellipsisandcopy_out_val_decl:Ast_412.Outcometree.out_val_decl->Ast_411.Outcometree.out_val_decl=fun{Ast_412.Outcometree.oval_name=oval_name;Ast_412.Outcometree.oval_type=oval_type;Ast_412.Outcometree.oval_prims=oval_prims;Ast_412.Outcometree.oval_attributes=oval_attributes}->{Ast_411.Outcometree.oval_name=oval_name;Ast_411.Outcometree.oval_type=(copy_out_typeoval_type);Ast_411.Outcometree.oval_prims=(List.map(funx->x)oval_prims);Ast_411.Outcometree.oval_attributes=(List.mapcopy_out_attributeoval_attributes)}andcopy_out_type_decl:Ast_412.Outcometree.out_type_decl->Ast_411.Outcometree.out_type_decl=fun{Ast_412.Outcometree.otype_name=otype_name;Ast_412.Outcometree.otype_params=otype_params;Ast_412.Outcometree.otype_type=otype_type;Ast_412.Outcometree.otype_private=otype_private;Ast_412.Outcometree.otype_immediate=otype_immediate;Ast_412.Outcometree.otype_unboxed=otype_unboxed;Ast_412.Outcometree.otype_cstrs=otype_cstrs}->{Ast_411.Outcometree.otype_name=otype_name;Ast_411.Outcometree.otype_params=(List.mapcopy_out_type_paramotype_params);Ast_411.Outcometree.otype_type=(copy_out_typeotype_type);Ast_411.Outcometree.otype_private=(copy_private_flagotype_private);Ast_411.Outcometree.otype_immediate=(copy_Type_immediacy_totype_immediate);Ast_411.Outcometree.otype_unboxed=otype_unboxed;Ast_411.Outcometree.otype_cstrs=(List.map(funx->let(x0,x1)=xin((copy_out_typex0),(copy_out_typex1)))otype_cstrs)}andcopy_Type_immediacy_t:Ast_412.Type_immediacy.t->Ast_411.Type_immediacy.t=function|Ast_412.Type_immediacy.Unknown->Ast_411.Type_immediacy.Unknown|Ast_412.Type_immediacy.Always->Ast_411.Type_immediacy.Always|Ast_412.Type_immediacy.Always_on_64bits->Ast_411.Type_immediacy.Always_on_64bitsandcopy_out_module_type:Ast_412.Outcometree.out_module_type->Ast_411.Outcometree.out_module_type=function|Ast_412.Outcometree.Omty_abstract->Ast_411.Outcometree.Omty_abstract|Ast_412.Outcometree.Omty_functor(x0,x1)->Ast_411.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_412.Outcometree.Omty_identx0->Ast_411.Outcometree.Omty_ident(copy_out_identx0)|Ast_412.Outcometree.Omty_signaturex0->Ast_411.Outcometree.Omty_signature(List.mapcopy_out_sig_itemx0)|Ast_412.Outcometree.Omty_aliasx0->Ast_411.Outcometree.Omty_alias(copy_out_identx0)andcopy_out_ext_status:Ast_412.Outcometree.out_ext_status->Ast_411.Outcometree.out_ext_status=function|Ast_412.Outcometree.Oext_first->Ast_411.Outcometree.Oext_first|Ast_412.Outcometree.Oext_next->Ast_411.Outcometree.Oext_next|Ast_412.Outcometree.Oext_exception->Ast_411.Outcometree.Oext_exceptionandcopy_out_extension_constructor:Ast_412.Outcometree.out_extension_constructor->Ast_411.Outcometree.out_extension_constructor=fun{Ast_412.Outcometree.oext_name=oext_name;Ast_412.Outcometree.oext_type_name=oext_type_name;Ast_412.Outcometree.oext_type_params=oext_type_params;Ast_412.Outcometree.oext_args=oext_args;Ast_412.Outcometree.oext_ret_type=oext_ret_type;Ast_412.Outcometree.oext_private=oext_private}->{Ast_411.Outcometree.oext_name=oext_name;Ast_411.Outcometree.oext_type_name=oext_type_name;Ast_411.Outcometree.oext_type_params=(List.map(funx->x)oext_type_params);Ast_411.Outcometree.oext_args=(List.mapcopy_out_typeoext_args);Ast_411.Outcometree.oext_ret_type=(Option.mapcopy_out_typeoext_ret_type);Ast_411.Outcometree.oext_private=(copy_private_flagoext_private)}andcopy_private_flag:Ast_412.Asttypes.private_flag->Ast_411.Asttypes.private_flag=function|Ast_412.Asttypes.Private->Ast_411.Asttypes.Private|Ast_412.Asttypes.Public->Ast_411.Asttypes.Publicandcopy_out_rec_status:Ast_412.Outcometree.out_rec_status->Ast_411.Outcometree.out_rec_status=function|Ast_412.Outcometree.Orec_not->Ast_411.Outcometree.Orec_not|Ast_412.Outcometree.Orec_first->Ast_411.Outcometree.Orec_first|Ast_412.Outcometree.Orec_next->Ast_411.Outcometree.Orec_nextandcopy_out_class_type:Ast_412.Outcometree.out_class_type->Ast_411.Outcometree.out_class_type=function|Ast_412.Outcometree.Octy_constr(x0,x1)->Ast_411.Outcometree.Octy_constr((copy_out_identx0),(List.mapcopy_out_typex1))|Ast_412.Outcometree.Octy_arrow(x0,x1,x2)->Ast_411.Outcometree.Octy_arrow(x0,(copy_out_typex1),(copy_out_class_typex2))|Ast_412.Outcometree.Octy_signature(x0,x1)->Ast_411.Outcometree.Octy_signature((Option.mapcopy_out_typex0),(List.mapcopy_out_class_sig_itemx1))andcopy_out_class_sig_item:Ast_412.Outcometree.out_class_sig_item->Ast_411.Outcometree.out_class_sig_item=function|Ast_412.Outcometree.Ocsg_constraint(x0,x1)->Ast_411.Outcometree.Ocsg_constraint((copy_out_typex0),(copy_out_typex1))|Ast_412.Outcometree.Ocsg_method(x0,x1,x2,x3)->Ast_411.Outcometree.Ocsg_method(x0,x1,x2,(copy_out_typex3))|Ast_412.Outcometree.Ocsg_value(x0,x1,x2,x3)->Ast_411.Outcometree.Ocsg_value(x0,x1,x2,(copy_out_typex3))andcopy_out_type_param:Ast_412.Outcometree.out_type_param->string*(bool*bool)=function(str,(v,inj))->(matchinjwith|Ast_412.Asttypes.NoInjectivity->()|Ast_412.Asttypes.Injective->(* ignoring [Injective] is not quite correct *)());letco,cn=matchvwith|Ast_412.Asttypes.Covariant->(true,false)|Ast_412.Asttypes.Contravariant->(false,true)|Ast_412.Asttypes.NoVariance->(false,false)instr,(co,cn)andcopy_variance:Ast_412.Asttypes.variance->Ast_411.Asttypes.variance=function|Ast_412.Asttypes.Covariant->Ast_411.Asttypes.Covariant|Ast_412.Asttypes.Contravariant->Ast_411.Asttypes.Contravariant|Ast_412.Asttypes.NoVariance->Ast_411.Asttypes.Invariantandcopy_out_type:Ast_412.Outcometree.out_type->Ast_411.Outcometree.out_type=function|Ast_412.Outcometree.Otyp_abstract->Ast_411.Outcometree.Otyp_abstract|Ast_412.Outcometree.Otyp_open->Ast_411.Outcometree.Otyp_open|Ast_412.Outcometree.Otyp_alias(x0,x1)->Ast_411.Outcometree.Otyp_alias((copy_out_typex0),x1)|Ast_412.Outcometree.Otyp_arrow(x0,x1,x2)->Ast_411.Outcometree.Otyp_arrow(x0,(copy_out_typex1),(copy_out_typex2))|Ast_412.Outcometree.Otyp_class(x0,x1,x2)->Ast_411.Outcometree.Otyp_class(x0,(copy_out_identx1),(List.mapcopy_out_typex2))|Ast_412.Outcometree.Otyp_constr(x0,x1)->Ast_411.Outcometree.Otyp_constr((copy_out_identx0),(List.mapcopy_out_typex1))|Ast_412.Outcometree.Otyp_manifest(x0,x1)->Ast_411.Outcometree.Otyp_manifest((copy_out_typex0),(copy_out_typex1))|Ast_412.Outcometree.Otyp_object(x0,x1)->Ast_411.Outcometree.Otyp_object((List.map(funx->let(x0,x1)=xin(x0,(copy_out_typex1)))x0),(Option.map(funx->x)x1))|Ast_412.Outcometree.Otyp_recordx0->Ast_411.Outcometree.Otyp_record(List.map(funx->let(x0,x1,x2)=xin(x0,x1,(copy_out_typex2)))x0)|Ast_412.Outcometree.Otyp_stuffx0->Ast_411.Outcometree.Otyp_stuffx0|Ast_412.Outcometree.Otyp_sumx0->Ast_411.Outcometree.Otyp_sum(List.map(funx->let(x0,x1,x2)=xin(x0,(List.mapcopy_out_typex1),(Option.mapcopy_out_typex2)))x0)|Ast_412.Outcometree.Otyp_tuplex0->Ast_411.Outcometree.Otyp_tuple(List.mapcopy_out_typex0)|Ast_412.Outcometree.Otyp_var(x0,x1)->Ast_411.Outcometree.Otyp_var(x0,x1)|Ast_412.Outcometree.Otyp_variant(x0,x1,x2,x3)->Ast_411.Outcometree.Otyp_variant(x0,(copy_out_variantx1),x2,(Option.map(funx->List.map(funx->x)x)x3))|Ast_412.Outcometree.Otyp_poly(x0,x1)->Ast_411.Outcometree.Otyp_poly((List.map(funx->x)x0),(copy_out_typex1))|Ast_412.Outcometree.Otyp_module(x0,x1,x2)->Ast_411.Outcometree.Otyp_module((copy_out_identx0),(List.map(funx->x)x1),(List.mapcopy_out_typex2))|Ast_412.Outcometree.Otyp_attribute(x0,x1)->Ast_411.Outcometree.Otyp_attribute((copy_out_typex0),(copy_out_attributex1))andcopy_out_attribute:Ast_412.Outcometree.out_attribute->Ast_411.Outcometree.out_attribute=fun{Ast_412.Outcometree.oattr_name=oattr_name}->{Ast_411.Outcometree.oattr_name=oattr_name}andcopy_out_variant:Ast_412.Outcometree.out_variant->Ast_411.Outcometree.out_variant=function|Ast_412.Outcometree.Ovar_fieldsx0->Ast_411.Outcometree.Ovar_fields(List.map(funx->let(x0,x1,x2)=xin(x0,x1,(List.mapcopy_out_typex2)))x0)|Ast_412.Outcometree.Ovar_typx0->Ast_411.Outcometree.Ovar_typ(copy_out_typex0)andcopy_out_value:Ast_412.Outcometree.out_value->Ast_411.Outcometree.out_value=function|Ast_412.Outcometree.Oval_arrayx0->Ast_411.Outcometree.Oval_array(List.mapcopy_out_valuex0)|Ast_412.Outcometree.Oval_charx0->Ast_411.Outcometree.Oval_charx0|Ast_412.Outcometree.Oval_constr(x0,x1)->Ast_411.Outcometree.Oval_constr((copy_out_identx0),(List.mapcopy_out_valuex1))|Ast_412.Outcometree.Oval_ellipsis->Ast_411.Outcometree.Oval_ellipsis|Ast_412.Outcometree.Oval_floatx0->Ast_411.Outcometree.Oval_floatx0|Ast_412.Outcometree.Oval_intx0->Ast_411.Outcometree.Oval_intx0|Ast_412.Outcometree.Oval_int32x0->Ast_411.Outcometree.Oval_int32x0|Ast_412.Outcometree.Oval_int64x0->Ast_411.Outcometree.Oval_int64x0|Ast_412.Outcometree.Oval_nativeintx0->Ast_411.Outcometree.Oval_nativeintx0|Ast_412.Outcometree.Oval_listx0->Ast_411.Outcometree.Oval_list(List.mapcopy_out_valuex0)|Ast_412.Outcometree.Oval_printerx0->Ast_411.Outcometree.Oval_printerx0|Ast_412.Outcometree.Oval_recordx0->Ast_411.Outcometree.Oval_record(List.map(funx->let(x0,x1)=xin((copy_out_identx0),(copy_out_valuex1)))x0)|Ast_412.Outcometree.Oval_string(x0,x1,x2)->Ast_411.Outcometree.Oval_string(x0,x1,(copy_out_stringx2))|Ast_412.Outcometree.Oval_stuffx0->Ast_411.Outcometree.Oval_stuffx0|Ast_412.Outcometree.Oval_tuplex0->Ast_411.Outcometree.Oval_tuple(List.mapcopy_out_valuex0)|Ast_412.Outcometree.Oval_variant(x0,x1)->Ast_411.Outcometree.Oval_variant(x0,(Option.mapcopy_out_valuex1))andcopy_out_string:Ast_412.Outcometree.out_string->Ast_411.Outcometree.out_string=function|Ast_412.Outcometree.Ostr_string->Ast_411.Outcometree.Ostr_string|Ast_412.Outcometree.Ostr_bytes->Ast_411.Outcometree.Ostr_bytesandcopy_out_ident:Ast_412.Outcometree.out_ident->Ast_411.Outcometree.out_ident=function|Ast_412.Outcometree.Oide_apply(x0,x1)->Ast_411.Outcometree.Oide_apply((copy_out_identx0),(copy_out_identx1))|Ast_412.Outcometree.Oide_dot(x0,x1)->Ast_411.Outcometree.Oide_dot((copy_out_identx0),x1)|Ast_412.Outcometree.Oide_identx0->Ast_411.Outcometree.Oide_ident(copy_out_namex0)andcopy_out_name:Ast_412.Outcometree.out_name->Ast_411.Outcometree.out_name=fun{Ast_412.Outcometree.printed_name=printed_name}->{Ast_411.Outcometree.printed_name=printed_name}