Caml1999I037xhgd)Parsetree(constant;@@+pconst_desc#@@-constant_desc@@@q5parsing/parsetree.mliZZ@@B@*pconst_loci@@(Location!t@@@p[[@@&C@@@A@@@@@Y\@@@@*@@A@;@@.Pconst_integerj&stringQ@@@|&optionL$charB@@@z@@@{@@7_248_2\@@LD@+Pconst_chark@@@y@@Ee Fe5@@ZE@-Pconst_stringl,@@@xK!t@@@w1<@@@u@@@v@@dfWYefW@@yF@,Pconst_floatmK@@@tIG@@@r@@@s@@|l<>}l<d@@G@@@A@@@@@^@@@@A@B@.location_stack ;@@@A$listK!t@@@}@@@~@@@@s  s 0@@@@H@A@)attribute!;@@)attr_name@@(Asttypes#loc@@@@@@xbfxb}@@P@,attr_payload@@'payload$@@@y~y~@@Q@(attr_loc@@!t@@@zz@@R@@@A@@@@@wOO{@@@@I@A@)extension";@@@A@<#loc@@@@@@@3@@@@@@@@@B l lB l @@@@J@B@*attributes#;@@@Aqe@@@@@@@@@@H  H  6@@@@K@B@M;@@$PStrՐ)structureb@@@@@K F HK F [@@-S@$PSig֐)signatureS@@@@@(L \ ^)L \ q@@=T@$PTypא)core_type%@@@@@8M  9M  @@MU@$PPatؐ'pattern,@@@*expression.@@@@@@@@TN  UN  @@iV@@@A@@@@@XJ 8 8@@@@lL@B@(;@@)ptyp_desc@@.core_type_desc&@@@iV  jV  @@~W@(ptyp_loc@@h!t@@@wW  xW  @@X@.ptyp_loc_stack@@@@@X  X  @@Y@/ptyp_attributes@@@@@Y  Y  4@@Z@@@A@@@@@T  Z S X@@@@M@B@3;@@(Ptyp_anyݐ@@] o q] o {@@[@(Ptyp_varސ@@@@@^  ^  @@\@*Ptyp_arrowߐ)arg_label@@@@@@@@@@@_  _  @@]@*Ptyp_tupleE@@@@@@@@@@@@@@@@@@hh@@^@+Ptyp_constrᐠK#loc)Longident!t@@@@@@u@@@@@@@@sKMsK~@@_@+Ptyp_object萠,object_field*@@@@@@x+closed_flag@@@@@"yac#ya@@7`@*Ptyp_class鐠#loc")"+?")"5@@Sz@(Ppat_var#loc*@@@@@@@@R"O"QS"O"i@@g{@*Ppat_alias@@@#locB@@@@@@@@j""k""@@|@-Ppat_constant@@@@@x""y"#@@}@-Ppat_interval@@@@@@@@#R#T#R#z@@~@*Ppat_tuple @q|@@@@@@@d@@@@@@@@+closed_flag@@@@@$$$$Z@@@.Ppat_construct#loc!t@@@@@@@F/#loc@@@@@@@@@@@@@@@@@@@@&m&o&m&@@@,Ppat_variant J%label@@@ˠ@@@@@@@@(+(-(+(U@@@+Ppat_record }@j#loc!t@@@@@@젠@@@@@@@@@}+closed_flag@@@@@'(((()(@@<@*Ppat_array @@@@@@@@9*w*y:*w*@@N@'Ppat_or @@@@@@@@J**K**@@_@/Ppat_constraint @@@&@@@@@[ **\ *+@@p@)Ppat_type#locu!t@@@@@@@@q!+:+<r!+:+Z@@@)Ppat_lazy9@@@@@~"+u+w"+u+@@@+Ppat_unpack#loccn@@@@@@@@@@@#++#++@@@.Ppat_exception_@@@@@+,,+,,@@@+Ppat_effectl@@@۠p@@@@@,--,--8@@@.Ppat_extension@@@@@--T-V--T-s@@@)Ppat_open'#loc!t@@@@@@ؠ@@@@@.--.--@@@@@A@@@@@""@@@@U@B@;@@)pexp_desc@@/expression_desc/@@@ 4.. 4..%@@@(pexp_loc@@!t@@@ 5.&.+5.&.@@@@.pexp_loc_stack@@@@@  6.A.F 6.A.e@@@/pexp_attributes@@@@@7.f.k7.f.@@*@@@A@@@@@2--8..@@@@.V@B@1;@@*Pexp_ident#loc7!t@@@m@@@n@@3;..4;..@@H@-Pexp_constant@@@l@@@>//A>//:@@U@(Pexp_let(rec_flag@@@kƠ-value_bindingf@@@i@@@j@@@h@@_A//`A//@@t@-Pexp_functionߠ.function_param4@@@f@@@gK/type_constraint6@@@d@@@e-function_body5@@@c@@H1517I1J1@@@*Pexp_applyD@@@b @)arg_label@@@_@W@@@^@@`@@@a@@X44X44Y@@@*Pexp_matche@@@],$case0@@@[@@@\@@c55c56@@@(Pexp_try~@@@ZE@@@X@@@Y@@e6T6Ve6T6z@@@*Pexp_tuple W@@@@T@@@U@@@@S@@V@@@W@@g66g66@@ @.Pexp_construct!]#loc!t@@@Q@@@R@@@O@@@P@@r8L8Nr8L8@@,@,Pexp_variant"|%label@@@N@@@L@@@M@@/x9x9z0x9x9@@D@+Pexp_record#@#locQ!t@@@H@@@I@@@@G@@J@@@K* @@@E@@@F@@\}:5:7]}:5:@@q@*Pexp_field$@@@D#locz!t@@@B@@@C@@v;z;|w;z;@@@-Pexp_setfield%3@@@A#loc!t@@@?@@@@D@@@>@@;;;;@@@*Pexp_array&U@@@<@@@=@@<<<<1@@@/Pexp_ifthenelse'c@@@;g@@@:o@@@8@@@9@@=<=@@@/Pexp_constraint+@@@.@@@-@@>>>>@@'@+Pexp_coerce,@@@,@@@*@@@+@@@)@@,? ?-? ?I@@A@)Pexp_send-@@@(#loc%label@@@&@@@'@@E??F?@@@Z@(Pexp_new.#loc_!t@@@$@@@%@@[@*@,\@*@I@@p@/Pexp_setinstvar/#loc%label@@@"@@@#$@@@!@@t@\@^u@\@@@@-Pexp_override0@#loc%label@@@@@@@F@@@@@@@@ @@@@@@@@@0Pexp_struct_item1.structure_itemc@@@[@@@@@@@@A,@@@+Pexp_assert2h@@@@@AHAJAHAe@@@)Pexp_lazy3u@@@@@AAAA@@@)Pexp_poly4@@@@@@@@@@@B B B B7@@@+Pexp_object5/class_structureK@@@@@BBBC@@ @,Pexp_newtype6P#loc@@@@@@@@@@@ C/C1 C/CZ@@ @)Pexp_pack7+module_expr`@@@m@@@@@@@@ CwCy CwC@@ 1@*Pexp_letop8%letop1@@@ @@ ,CC -CC@@ A@.Pexp_extension9a@@@ @@ 9DHDJ :DHDg@@ N@0Pexp_unreachable:@@ BDxDz CDxD@@ W@@@A@@@@@ F:..@@@@ ZW@B@;@@&pc_lhs;@@@@@r TDD UDD@@ i@(pc_guard<@@ 2@@@p@@@q dDD eDD@@ y@&pc_rhs=@@@@@o oDD pDD@@ @@@A@@@@@ sDD tDE@@@@ X@B@P;@@$let_>@@*binding_op2@@@v E\E` E\Er@@ @$ands?@@ @@@t@@@u EsEw EsE@@ @$body@@@P@@@s EE EE@@ @@@A@@@@@ ELEL EE@@@@ Y@B@(;@@'pbop_opA@@ #loc @@@z@@@{ EE EE@@ @(pbop_patB@@@@@y EE EE@@ @(pbop_expC@@@@@x EE EF @@ @(pbop_locD@@ !t@@@w F F F F'@@ @@@A@@@@@ EE F(F+@@@@ Z@B@3function_param_desc3;@@*Pparam_valE M)arg_label@@@ Π@@@@@@@@@~@@ FGFI FGF@@ @.Pparam_newtypeF i#loc @@@|@@@}@@ HH HI@@ -@@@A@@@@@ F-F-@@@@ 0[@B@;@@*pparam_locG@@ !t@@@ -LrLv .LrL@@ B@+pparam_descH@@P@@@ 9LL :LL@@ N@@@A@@@@@ =L]L] >LL@@@@ R\@B@;@@.Pfunction_bodyI@@@@@ NLL OLL@@ c@/Pfunction_casesJ Π@@@@@@ X!t@@@@@@@@ kLL lLM*@@ @@@A@@@@@ oLL@@@@ ]@B@;@@+PconstraintK J@@@@@ NN NN@@ @'PcoerceL _ [@@@@@@ `@@@@@ NN NN@@ @@@A@@@@@ NN@@@@ ^@B@1value_description7;@@)pval_nameM@@ #loc @@@@@@  OpOu  OpO@@ @)pval_typeN@@ @@@ OO OO@@ @)pval_primO@@ 9 @@@@@@ OO OO@@ @/pval_attributesP@@ I@@@ OO OO@@ @(pval_locQ@@ !t@@@ PP  PP"@@ @@@A@@@@@  OROR P#P(@@@@ _@B@0type_declaration8;@@*ptype_nameR@@ R#loc @@@@@@ QjQo QjQ@@ @,ptype_paramsS@@ @ @@@@@ u(variance@@@@ |+injectivity@@@@@@@@@@ 'QQ (QQ@@ <@+ptype_cstrsT@@ @ @@@@ @@@@ 8!t@@@@@@@@ H!QQ I!QR!@@ ]@*ptype_kindU@@)type_kind9@@@ V#R^Rc W#R^Ry@@ k@-ptype_privateV@@ ,private_flag@@@ c$RzR d$RzR@@ x@.ptype_manifestW@@ A =@@@@@@ s%RR t%RR@@ @0ptype_attributesX@@ @@@ ~&RR &RS@@ @)ptype_locY@@ }!t@@@ 'S=SB 'S=SX@@ @@@A@@@@@ QMQM (SYS^@@@@ `@B@C;@@.Ptype_abstractZ@@ DX X" DX X2@@ @-Ptype_variant[ 7constructor_declaration;@@@@@@@@ EX3X5 EX3Xd@@ @,Ptype_record\ 21label_declaration:@@@@@@@@ FXeXg FXeX@@ @*Ptype_open]@@ GXX GXX@@ @.Ptype_external^ @@@@@ HXX HXX@@ @@@A@@@@@ CXX@@@@ a@B@$;@@(pld_name_@@ H#loc @@@@@@ LXY LXY@@ @+pld_mutable`@@ Z,mutable_flag@@@ MYY MYY7@@ @(pld_typea@@ @@@ NY8Y= NY8YQ@@ $@'pld_locb@@ !t@@@ OYRYW OYRYk@@ 2@.pld_attributesc@@ @@@ (PYlYq )PYlY@@ =@@@A@@@@@ ,JXX -QYY@@@@ Ab@B@;@@(pcd_named@@ #loc @@@@@@ B_[[ C_[[@@ W@(pcd_varse@@  #loc 0@@@@@@@@@ Y`[[ Z`[[@@ n@(pcd_argsf@@5constructor_arguments<@@@ ga[[ ha[[@@ |@'pcd_resg@@ E A@@@@@@ wb[\ xb[\@@ @'pcd_loch@@ v!t@@@ c\\  c\\4@@ @.pcd_attributesi@@ @@@ d\5\: d\5\U@@ @@@A@@@@@ ][v[v e\y\~@@@@ c@B@6;@@+Pcstr_tuplej  t@@@@@@@@ h\\ h\\@@ @,Pcstr_recordk *@@@@@@@@ i\\ i\\@@ @@@A@@@@@ g\\@@@@ d@B@.type_extension=;@@+ptyext_pathl@@ (#loc !t@@@@@@̰ z__ z__@@ @-ptyext_paramsm@@ W@ @@@Ƞ@@ M(variance@@@Ơ@ T+injectivity@@@@@@@@@@ʰ {__ {_` @@ @3ptyext_constructorsn@@ }5extension_constructor>@@@@@@İ |` ` |` `B@@ '@.ptyext_privateo@@ u,private_flag@@@° }`C`H }`C`e@@ 4@*ptyext_locp@@ !t@@@ -~`f`k .~`f`@@ B@1ptyext_attributesq@@ @@@ 8`` 9``@@ M@@@A@@@@@ <x__ =``@@@@ Qe@B@4;@@)pext_namer@@ #loc *@@@@@@Ѱ RaYa^ SaYat@@ g@)pext_kinds@@:extension_constructor_kind@@@@ϰ `auaz aaua@@ u@(pext_loct@@ _!t@@@ΰ naa oaa@@ @/pext_attributesu@@ @@@Ͱ yaa zaa@@ @@@A@@@@@ }a7a7 ~bb@@@@ f@B@.type_exception?;@@2ptyexn_constructorv@@@@@԰ b b$ b bO@@ @*ptyexn_locw@@ !t@@@Ӱ bPbT bPbl@@ @1ptyexn_attributesx@@ @@@Ұ bmbq bmb@@ @@@A@@@@@ bb bb@@@@ g@B@T;@@)Pext_decly / #loc @@@@@@@@@ܠh@@@٠  @@@@@@@@ cc ccZ@@ @+Pext_rebindz :#loc !t@@@@@@@@ ff ff@@@@@A@@@@@ bb@@@@h@B@*class_typeA;@@)pcty_desc{@@/class_type_descB@@@߰gggg@@@(pcty_loc|@@!t@@@ްgggg@@%@/pcty_attributes}@@ @@@ݰgggg@@0@@@A@@@@@gmgm hh@@@@4i@B@&;@@+Pcty_constr~ #loc =!t@@@@@@  @@@@@@@@BhhChhP@@W@.Pcty_signature/class_signatureC@@@@@RhhShh@@g@*Pcty_arrow )arg_label@@@ 0@@@u@@@@@jhhkhh@@@.Pcty_extension @@@@@wjrjtxjrj@@@)Pcty_open0open_descriptionZ@@@"@@@@@jjjj@@@@@A@@@@@hh@@@@j@B@E;@@*pcsig_self@@ h@@@kk kk"@@@,pcsig_fields@@0class_type_fieldD@@@@@@k#k(k#kL@@@@@A@@@@@jjkMkR@@@@k@B@;@@)pctf_desc@@5class_type_field_descE@@@lQlVlQlw@@@(pctf_loc@@!t@@@lxl}lxl@@@/pctf_attributes@@ Q@@@llll@@@@@A@@@@@l4l4ll@@@@l@B@&;@@,Pctf_inherit@@@@@lllm@@ @(Pctf_val@]#locb%label@@@@@@@j,mutable_flag@@@@q,virtual_flag@@@@ @@@@@@@ m.m0!m.ms@@5@+Pctf_method@#loc%label@@@@@@@,private_flag@@@@,virtual_flag@@@@@@@@@@@LmmMmm@@a@/Pctf_constraint@(@@@@-@@@@@@@bnBnDcnBnp@@w@.Pctf_attributem@@@@@onnpnn@@@.Pctf_extension @@@@@|nn}nn@@@@@A@@@@@ll@@@@m@B@+class_infosF;!a@@A(pci_virt@@,virtual_flag@@@oooo,@@@*pci_params@@@u@@@ @@ (variance@@@ @+injectivity@@@@@ @@ @@@ o-o2o-oj@@@(pci_name@@ #loc@@@@@@okopoko@@@(pci_expr@@Noooo@@ @'pci_loc@@!t@@@oooo@@ @.pci_attributes@@b@@@oooo@@ @@@A@Y@@@@@nnoo@@@@ n@B@1class_descriptionG;@@@A@@@@@@@@@@ pp pp@@@@o@B@6class_type_declarationH;@@@A@@@@@@@@@@pppq(@@@@0p@B@*class_exprI;@@(pcl_desc@@/class_expr_descJ@@@/qvq{0qvq@@D @'pcl_loc@@.!t@@@=qq>qq@@R @.pcl_attributes@@@@@HqqIqq@@]@@@A@@@@@Lq_q_Mqq@@@@aq@B@&;@@*Pcl_constr#locj!t@@@,@@@-ݠ9@@@*@@@+@@or rpr r>@@@-Pcl_structure@@@)@@| rhrj} rhr@@@'Pcl_fun)arg_label@@@(bC@@@&@@@'S@@@%{@@@$@@ rr rr@@@)Pcl_apply@@@#!@)arg_label@@@ @m@@@@@!@@@"@@uuuu@@@'Pcl_let#(rec_flag@@@D ~@@@@@@>@@@@@!vv!vw@@@.Pcl_constraintK@@@@@@@@(xcxe(xcx@@@-Pcl_extension @@@@@)xx)xx@@ @(Pcl_open@@@m@@@@@ *xx *xy@@@@@A@@@@@ qq@@@@!r@B@*;@@*pcstr_self@@@@@0.y:y?.y:yS@@0@,pcstr_fields@@+class_fieldL@@@.@@@/./yTyY//yTyx@@C@@@A@@@@@2,yy30yyy~@@@@Gs@B@;@@(pcf_desc@@0class_field_descM@@@3D9zvz{E9zvz@@Y@'pcf_loc@@C!t@@@2R:zzS:zz@@g@.pcf_attributes@@@@@1];zz^;zz@@r@@@A@@@@@a7z^z^b<zz@@@@vt@B@&;@@+Pcf_inherit-override_flag@@@H@@@GO#loc_@@@D@@@E@@@F@@?{{?{{S@@@'Pcf_val@#loc%label@@@A@@@B@,mutable_flag@@@@@0class_field_kindN@@@?@@C@@N}}N}~@@@*Pcf_method@#loc%label@@@<@@@=@&,private_flag@@@;@(@@@:@@>@@]]R@@@.Pcf_constraint@@@@8@@@@7@@9@@c8:c8e@@@/Pcf_initializer@@@6@@dd@@  @-Pcf_attribute@@@5@@ee@@!@-Pcf_extension:@@@4@@ff@@'"@@@A@@@@@>zz@@@@*u@B@n;@@+Cfk_virtual@@@K@@&i9;'i9U@@;#@,Cfk_concrete-override_flag@@@J@@@I@@9jVX:jV@@N$@@@A@@@@@=h""@@@@Qv@B@1class_declarationO;@@@AF@@@L@@@M@@@@NlOl@@@@cw@B@+module_typeP;@@)pmty_desc@@0module_type_descQ@@@Pbs#cs?@@w%@(pmty_loc@@a!t@@@Opt@Eqt@Z@@&@/pmty_attributes@@@@@N{u[`|u[|@@'@@@A@@@@@qv@@@@x@B@&;@@*Pmty_ident#loc!t@@@[@@@\@@yy@@(@.Pmty_signature@@@Z@@zz!@@)@,Pmty_functor1functor_parameterR@@@Yf@@@X@@{8:{8k@@*@)Pmty_with@@@W?/with_constraint_@@@U@@@V@@}}@@+@+Pmty_typeof @@@T@@~~@@,@.Pmty_extension@@@S@@7@@-@*Pmty_aliasS#loc!t@@@Q@@@R@@HJHi@@.@@@A@@@@@x@@@@y@B@Z;@@$Unit@@@@)/@%Namedy#loc@@@^@@@_@@@`w@@@]@@12@@F0@@@A@@@@@5@@@@Iz@B@;@@@A.signature_itemT@@@a@@@b@@@@HhhIh@@@@]{@B@ ;@@)psig_desc@@3signature_item_descU@@@dZ[@@o1@(psig_loc@@Y!t@@@chi@@}2@@@A@@@@@lm@@@@|@B@;@@*Psig_value@@@{@@~   ,@@3@)Psig_type(rec_flag@@@z@@@x@@@y@@~~@@4@.Psig_typesubst@@@v@@@w@@@@5@+Psig_typext@@@u@@DFDe@@6@.Psig_exceptionA@@@t@@@@7@+Psig_module2module_declarationV@@@s@@@@8@-Psig_modsubst3module_substitutionW@@@r@@8@@9@.Psig_recmodulee$@@@p@@@q@@QSQ~@@ :@,Psig_modtypeÐ7module_type_declarationX@@@o@@@@;@1Psig_modtypesubstĐ@@@n@@I@@)<@)Psig_openŐ@@@m@@!pr"p@@6=@,Psig_includeƐ3include_description]@@@l@@12@@F>@*Psig_classǐF@@@j@@@k@@DE@@Y?@/Psig_class_typeȐĠF@@@h@@@i@@W<>X<n@@l@@.Psig_attributeɐb@@@g@@de@@yA@.Psig_extensionʐ@@@f@@@e@@uv @@B@@@A@@@@@y@@@@}@B@;@@(pmd_name@@#loc_j@@@@@@@@@<A<]@@C@(pmd_type@@@@@~^c^y@@D@.pmd_attributes@@@@@}zz@@E@'pmd_loc@@!t@@@|@@F@@@A@@@@@@@@@~@B@;@@(pms_name@@"#loc@@@@@@=B=W@@G@,pms_manifest@@4#loc!t@@@@@@X]X{@@H@.pms_attributes@@b@@@||@@I@'pms_loc@@!t@@@@@J@@@A@@@@@@@@@@B@;@@)pmtd_name@@i#loc@@@@@@DID_@@-K@)pmtd_type@@m@@@@@@(`e)`@@=L@/pmtd_attributes@@@@@34@@HM@(pmtd_loc@@2!t@@@AB@@VN@@@A@@@@@E  F@@@@Z@@B@*open_infosY;!a@@A*popen_expr@@ XY@@mO@.popen_override@@-override_flag@@@ef@@zP@)popen_loc@@d!t@@@st@@Q@0popen_attributes@@@@@~<@@R@@@A@Y@@@@@=B@@@@A@B@;@@@AE#loc!t@@@@@@@@@@@@@@@@@B@B@0open_declaration[;@@@A @@@@@@@@@@DDDq@@@@C@B@-include_infos\;!a@@A)pincl_mod@@  @@S@)pincl_loc@@!t@@@5@@T@0pincl_attributes@@N@@@6;6X@@U@@@A@Y@@@@@Y^@@@@D@B@;@@@A88@@@@@@@@@@```@@@@E@B@3include_declaration^;@@@A @@@@@@@@@@ @@@@F@B@;;@@*Pwith_typeސn#loc#!t@@@@@@@@@@@#hj$h@@8V@,Pwith_moduleߐ#loc=!t@@@@@@#locJ!t@@@@@@@@F02G0e@@[W@-Pwith_modtype#loc`!t@@@@@@@@@@@`a@@uX@2Pwith_modtypesubstᐠ#locz!t@@@@@@@@@@@z{@@Y@/Pwith_typesubst␠#loc!t@@@@@@@@@@@KMK@@Z@.Pwith_modsubst㐠#loc!t@@@@@@#loc!t@@@@@@@@@@[@@@A@@@@@RR@@@@G@B@ ;@@)pmod_desc@@0module_expr_desca@@@qvq@@\@(pmod_loc@@!t@@@  @@]@/pmod_attributes@@W@@@  @@^@@@A@@@@@YY @@@@H@B@&;@@*Pmod_ident琠R#loc!t@@@@@@@@  -@@_@.Pmod_structure萠@@@@@:<:Y@@%`@,Pmod_functor鐠j@@@@@@@@!su"s@@6a@*Pmod_applyꐠ@@@"@@@@@23@@Gb@/Pmod_apply_unit될/@@@@@?  @ -@@Tc@/Pmod_constraint쐠<@@@@@@@@P=?Q=m@@ed@+Pmod_unpack퐠 @@@@@]^@@re@.Pmod_extension@@@@@jk@@f@@@A@@@@@n @@@@I@B@^;@@@A@@@@@@@@@@~@@@@J@B@;@@)pstr_desc@@3structure_item_descd@@@İ#(#G@@g@(pstr_loc@@!t@@@ðHMHb@@h@@@A@@@@@ch@@@@K@B@;@@)Pstr_evalc@@@ܠ)@@@@@!!@@i@*Pstr_value(rec_flag@@@ڠ=w@@@@@@@@""@@j@.Pstr_primitive_@@@@@):<):a@@k@)Pstr_typeA(rec_flag@@@֠b^@@@@@@@@,,@@ l@+Pstr_typextK@@@@@../@@m@.Pstr_exceptionJ@@@@@/IK/Im@@#n@+Pstr_module.module_bindingg@@@@@22@@3o@.Pstr_recmodule@@@@@@@@0313@@Ep@,Pstr_modtype9@@@@@=5NP>5Ny@@Rq@)Pstr_open@@@@@K6L6@@`r@*Pstr_classˠ@@@@@@@@^7_7@@ss@/Pstr_class_typeޠ@@@@@@@@p9&(q9&X@@t@,Pstr_include@@@@@~;;@@u@.Pstr_attribute@@@@@<<@@v@.Pstr_extension@@@Ơ@@@@@==1@@w@@@A@@@@@ jj@@@@L@B@0value_constrainte;@@.Pvc_constraint8locally_abstract_univars@@(#loc@@@@@@@@@AsyAs@@x@#typ@@@@@BB@@y@@@@[]C@@z@,Pvc_coercion&ground@@@@@@@@߰DD@@{@(coercion@@@@@ݰDD@@|@@@DD@@ }@@@A@@@@@?DD@@@@ M@B@;@@'pvb_pat@@@@@Q Q@@~@(pvb_expr@@@@@R R5@@&@.pvb_constraint@@{@@@@@@"S6:#S6b@@7@.pvb_attributes @@@@@-Tcg.Tc@@B@'pvb_loc @@,!t@@@;U<U@@P@@@A@@@@@?O@V@@@@TN@B@*;@@(pmb_name @@#loc&1@@@@@@@@@ZZ[Z@@o@(pmb_expr @@U@@@e[ f[!@@z@.pmb_attributes @@@@@p\"'q\"B@@@'pmb_loc@@o!t@@@~]CH]C\@@@@@A@@@@@X^]b@@@@O@B@/toplevel_phraseh;@@(Ptop_def@@@@@ff@@@(Ptop_dir2toplevel_directivei@@@@@g  g +@@@@@A@@@@@e@@@@@A@ ;@@)pdir_name@@#loc@@@@@@kfjkf@@@(pdir_arg@@2directive_argumentj@@@@@@ll@@@(pdir_loc@@!t@@@mm@@@@@A@@@@@iIIn@@@@@B@;@@*pdira_desc@@7directive_argument_desck@@@rr@@ @)pdira_loc@@!t@@@ss)@@@@@A@@@@@pt*-@@@@@B@;@@+Pdir_string@@@@@wMOwMf@@.@(Pdir_int@@@@@@@@@@@1xgi2xg@@F@*Pdir_identF!t@@@@@AyBy@@V@)Pdir_bool@@@@@OzPz@@d@@@A@@@@@Sv//@@@@g@B@@RZP)Parsetree0Uҩ=p>*%"e(Warnings0mJɒkgrn{T8cئ@@@Caml1999T037=a4C)Parsetree*ocaml.text&_none_@@A Abstract syntax tree produced by parsing {b Warning:} this module is unstable and part of {{!Compiler_libs}compiler-libs}. 5parsing/parsetree.mliP77U@@@@@@3@@@@@@#intA;@@@A@@@@@:@A@$charB;@@A@@@@@>@A@&stringQ;@@ A@@@@@B@@@%bytesC;@@ A@@@@@F@@@%floatD;@@A@@@@@J@@@$boolE;@@%falsec@@T@$trued@@Z@@@A@@@@@[@A@$unitF;@@"()e@@e@@@A@@@@@f@A@ #exnG;@@@A@@@@@j@@@#effH;@@O@A@A@@@@@@s@@@,continuationI;@@Q@@P@B@A@nY@@@@@@@@@%arrayJ;@@R@A@A@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@A@@@@@@@@%int32N;@@A@@@@@@@@%int64O;@@A@@@@@@@@&lazy_tP;@@X@AJA@Y@@@@@@@@5extension_constructorR;@@A@@@@@@@@*floatarrayS;@@A@@@@@@@@&iarrayT;@@Y@A[A@Y@@@@@@@@*atomic_locU;@@Z@AdA@@@@@@@@@.Assert_failure`#@@@@@J@@@@@@@@[@@A=ocaml.warn_on_literal_pattern @ @0Division_by_zero]#@@@A  @+End_of_file\#$@@@A@'FailureY#,@'@@A!$$@0Invalid_argumentX#5@0@@A*$-#-@-Match_failureV#>@@=@9@;@@a@@A;5>4>@)Not_foundZ#O@@@AC=F<F@-Out_of_memoryW#W@@@AKENDN@.Stack_overflow^#_@@@ASMVLV@.Sys_blocked_io_#g@@@A[U^T^@)Sys_error[#o@j@@Ad^g]g@:Undefined_recursive_modulea#x@@w@s@u@@h@@Auoxnx@:Continuation_already_takenb#@@@A}wv@&Stdlib@Axࠐ(Asttypes(AsttypesWW@@A3@ @AW@@@A+(constant!AYY@@;@@+pconst_desc#@@-constant_desc"A@@@ѰZZ@@B@*pconst_loci@@(Location!t@@@ #[[@@C@@@A@@@@@Y\@@@@@@@###Z@@@Ш@г&-constant_descZZ@@.3@F=;@@@A@@@@@@@@0;@@@A@@@@@^l<d@@@@A@@A @@<@@@6@#22)[ @(@@Ш@г5(Location[[@:[[@@@D$@@G@@ $'@?@@A@;@+TT^"^/@@;@@.Pconst_integerj@@@ &i@@@ '@@@ )@@ _24_2\@)ocaml.doc Integer constants such as [3] [3l] [3L] [3n]. Suffixes [[g-z][G-Z]] are accepted by the parser. Suffixes except ['l'], ['L'] and ['n'] are rejected by the typechecker `]cd@@@@@@@6D@+Pconst_chark@@@ *@@+e ,e5@: Character such as ['c']. 9e7:eV@@@@@@@RE@-Pconst_stringl@@@ +!t@@@ ,#@@@ -@@@ /@@XfWYYfW@K Constant string such as ["constant"] or [{delim|other constant|delim}]. The location span the content of the string, without the delimiters. fggk7;@@@@@@@F@,Pconst_floatm@@@@ 0ڠM@@@ 1@@@ 3@@~l<>@p Float constant such as [3.4], [2e5] or [1.4e-4]. Suffixes [g-z][G-Z] are accepted by the parser. Suffixes are rejected by the typechecker. mekq @@@@@@@G@@@A@@@@@@@@@#_26_2D@v@г&string_2H_2N@@ְ@@г&option_2V@г$char_2Q_2U@@@@@@@@@Ð@@@@@@#e"e-@@г$chare1@@@@@@ސ@@@@@@#fW[fWh@w@г&stringfWlfWr@@ @@г(LocationfWufW}@fW~fW@@@1@@г&optionfW@г&string fW fW@@C@@@D@@@@@@@@@@#l<@l<L@@г&string'l<P(l<V@@`@@г&option1l<^`@г$char9l<Y:l<]@@r@@@sk@@@@.M@@@@@@@A@x@@ðw@A+.location_stackBRs Ss @@;@@@Aڠ!t@@@ @@@ @@@@cs  ds 0@@@@|H@@@Aг$listms , @г(Locationws !xs )@{s *|s +@@@#3{zz{{{{{@4;@@@A<@@@ @ @@@@)@@@&@A@@@5)@@+@@3@@A,+@6 {1 Extension points} u22u2M@@@@@@3@"TN@AA+)attributeCwOTwO]@@;@@)attr_name@@:#loc@@@ @@@ xbfxb}@@P@,attr_payload@@'payloadC@@@ °y~y~@@Q@(attr_loc@@*!t@@@ Űzz@@R@@@A@@@@@wOO{@ѐ Attributes such as [[\@id ARG]] and [[\@\@id ARG]]. Metadata containers passed around within the AST. The compiler ignores unknown attributes. |@ a j@@@@@@@@@I@@#AA6xbo@5@@Ш@гDExbyxb|@гG&stringxbrxbx@@O3@;@@@A@@@@@tq@@c)extensionC;@@@A @@@U@ @@@@]B l l^B l @P  Extension points such as [[%id ARG] and [%%id ARG]]. Sub-language placeholder -- rejected by the typechecker. kC  lF  @@@@@@@@@J@*attributesC;@@@A @@@V@ @@@@zH  {H  6@@@@K@;@@@A@@@@@J 8 8N  @@@@L@)core_typeC;@@@A@@@@@T  Z S X@3 {1 Core language} Q g gQ g @@@@@@6 {2 Type expressions} R  R  @@@@@@@@@M@.core_type_descC;@@@A@@@@@\ Z Z@@@@N@,package_typeC;@@@A@@@@@in@ As {!package_type} typed values: - [{ppt_path: S; ppt_cstrs: []}] represents [(module S)], - [{ppt_path: S; ppt_cstrs: [(t1, T1) ; ... ; (tn, Tn)]}] represents [(module S with type t1 = T1 and ... and tn = Tn)]. oocl@@@@@@@@@O@)row_fieldC;@@@A@@@@@nn@@@@P@.row_field_descC;@@@A@@@@@ W p@@@@Q@,object_fieldC;@@@A@@@@@    @@@@R@1object_field_descC;@@@A@@@@@  !-!F@@@@S@'patternC;@@@A@@@@@!]!]""@c. {2 Patterns} !H!H!H![@@@@@@@@@T@,pattern_descC;@@@A@@@@@"".--@@@@U@*expressionC;@@@A@@@@@ 2-- 8..@7 {2 Value expressions} 0--0--@@@@@@@@@0V@/expression_descC;@@@A@@@@@:.. DxD@@@@8W@$caseC;@@@A@@@@@'DD(DE@ D Values of type {!case} represents [(P -> E)] or [(P when E0 -> E)] 5EE6EEJ@@@@@@@@@NX@%letopC;@@@A@@@@@=ELEL>EE@@@@VY@*binding_opC;@@@A@@@@@EEEFF(F+@@@@^Z@3function_param_descC;@@@A@@@@@MF-F-NHI@@@@f[@.function_paramC;@@@A@@@@@UL]L]VLL@@@@n\@-function_bodyC;@@@A@@@@@]LL^LM*@P G See the comment on {{!expression_desc.Pexp_function}[Pexp_function]}. kN8N8lN8N@@@@@@@@@]@/type_constraintC;@@@A@@@@@sNNtNN@@@@^@1value_descriptionC;@@@A@@@@@{ OROR|P#P(@󐠠8 {2 Value descriptions}  O3O3 O3OP@@@@@@| Values of type {!value_description} represents: - [val x: T], when {{!value_description.pval_prim}[pval_prim]} is [[]] - [external x: T = "s1" ... "sn"] when {{!value_description.pval_prim}[pval_prim]} is [["s1";..."sn"]] P)P)Q+Q-@@@@@@@@@_@0type_declarationC;@@@A@@@@@QMQM(SYS^@7 {2 Type declarations} Q/Q/Q/QK@@@@@@  Here are type declarations and their representation, for various {{!type_declaration.ptype_kind}[ptype_kind]} and {{!type_declaration.ptype_manifest}[ptype_manifest]} values: - [type t] when [type_kind] is {{!type_kind.Ptype_abstract}[Ptype_abstract]}, and [manifest] is [None], - [type t = T0] when [type_kind] is {{!type_kind.Ptype_abstract}[Ptype_abstract]}, and [manifest] is [Some T0], - [type t = C of T | ...] when [type_kind] is {{!type_kind.Ptype_variant}[Ptype_variant]}, and [manifest] is [None], - [type t = T0 = C of T | ...] when [type_kind] is {{!type_kind.Ptype_variant}[Ptype_variant]}, and [manifest] is [Some T0], - [type t = {l: T; ...}] when [type_kind] is {{!type_kind.Ptype_record}[Ptype_record]}, and [manifest] is [None], - [type t = T0 = {l : T; ...}] when [type_kind] is {{!type_kind.Ptype_record}[Ptype_record]}, and [manifest] is [Some T0], - [type t = ..] when [type_kind] is {{!type_kind.Ptype_open}[Ptype_open]}, and [manifest] is [None]. )S_S_AX X@@@@@@@@@`@)type_kindC;@@@A@@@@@CXXHXX@@@@a@1label_declarationC;@@@A@@@@@JXXQYY@  - [{ ...; l: T; ... }] when {{!label_declaration.pld_mutable}[pld_mutable]} is {{!Asttypes.mutable_flag.Immutable}[Immutable]}, - [{ ...; mutable l: T; ... }] when {{!label_declaration.pld_mutable}[pld_mutable]} is {{!Asttypes.mutable_flag.Mutable}[Mutable]}. Note: [T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}. RYY[[r[t@@@@@@@@@b@7constructor_declarationC;@@@A@@@@@][v[ve\y\~@@@@c@5constructor_argumentsC;@@@A@@@@@g\\i\\@@@@d@.type_extensionC;@@@A@@@@@x__``@䐠 c Definition of new extensions constructors for the extensive sum type [t] ([type t += ...]). ``a3a5@@@@@@@@@e@5extension_constructorC;@@@A@@@@@a7a7bb@@@@ f@.type_exceptionC;@@@A@@@@@bbbb@ 0 Definition of a new exception ([exception E]). bbbb@@@@@@@@@6g@:extension_constructor_kindC;@@@A@@@@@%bb&ff@@@@>h@*class_typeC;@@@A@@@@@-gmgm.hh@4 {1 Class language} ;gg<gg8@@@@@@ - {2 Type expressions for the class language} Ig9g9Jg9gk@@@@@@@@@bi@/class_type_descC;@@@A@@@@@QhhRjj@@@@jj@/class_signatureC;@@@A@@@@@YjjZkMkR@L Values of type [class_signature] represents: - [object('selfpat) ... end] - [object ... end] when {{!class_signature.pcsig_self}[pcsig_self]} is {{!core_type_desc.Ptyp_any}[Ptyp_any]} gkSkShl0l2@@@@@@@@@k@0class_type_fieldC;@@@A@@@@@ol4l4pll@@@@l@5class_type_field_descC;@@@A@@@@@wllxnn@@@@m@+class_infosC;@@ @A@A@G@B@@@nnoo@w Values of type [class_expr class_infos] represents: - [class c = ...] - [class ['a1,...,'an] c = ...] - [class virtual c = ...] They are also used for "class type" declaration. oopp@@@@@@@@@n@1class_descriptionC;@@@A @@@W@ @@@@pppp@@@@o@6class_type_declarationC;@@@A @@@X@ @@@@pppq(@@@@p@*class_exprC;@@@A@@@@@q_q_qq@0 . {2 Value expressions for the class language} q*q*q*q]@@@@@@@@@q@/class_expr_descC;@@@A@@@@@qq*xy@@@@r@/class_structureC;@@@A@@@@@,yy0yyy~@ɐ Values of type {!class_structure} represents: - [object(selfpat) ... end] - [object ... end] when {{!class_structure.pcstr_self}[pcstr_self]} is {{!pattern_desc.Ppat_any}[Ppat_any]} 1yy5zZz\@@@@@@@@@s@+class_fieldC;@@@A@@@@@7z^z^<zz@@@@t@0class_field_descC;@@@A@@@@@>zzf@@@@ u@0class_field_kindC;@@@A@@@@@h""jV@@@@v@1class_declarationC;@@@A @@@Y@ @@@@ l l@@@@$w@+module_typeC;@@@A@@@@@qv@5 {1 Module language} !n"n@@@@@@ . {2 Type expressions for the module language} /o0o@@@@@@@@@Hx@0module_type_descC;@@@A@@@@@7x8Hi@@@@Py@1functor_parameterC;@@@A@@@@@?@@@@@Xz@)signatureC;@@@A @@@Z@ @@@@NhhOh@@@@g{@.signature_itemC;@@@A@@@@@VW@@@@o|@3signature_item_descC;@@@A@@@@@^_ @@@@w}@2module_declarationC;@@@A@@@@@fg@Y 9 Values of type [module_declaration] represents [S : MT] tu@@@@@@@@@~@3module_substitutionC;@@@A@@@@@|}@o : Values of type [module_substitution] represents [S := M] @@@@@@@@@@7module_type_declarationC;@@@A@@@@@  @ Values of type [module_type_declaration] represents: - [S = MT], - [S] for abstract module type declaration, when {{!module_type_declaration.pmtd_type}[pmtd_type]} is [None]. @@@@@@@@@@@*open_infosC;@@ @A@A@G@B@@@=B@ m Values of type ['a open_infos] represents: - [open! X] when {{!open_infos.popen_override}[popen_override]} is {{!Asttypes.override_flag.Override}[Override]} (silences the "used identifier shadowing" warning) - [open X] when {{!open_infos.popen_override}[popen_override]} is {{!Asttypes.override_flag.Fresh}[Fresh]} CC@@@@@@@@@A@0open_descriptionC;@@@A @@@[@ @@@@@ T Values of type [open_description] represents: - [open M.N] - [open M(N).O] ,B@@@@@@@@@B@0open_declarationC;@@@A @@@\@ @@@@DDDq@ڐ p Values of type [open_declaration] represents: - [open M.N] - [open M(N).O] - [open struct ... end] rr@@@@@@@@@C@-include_infosC;@@ @A@A@G@B@@@Y^@@@@D@3include_descriptionC;@@@A @@@]@ @@@@```@ > Values of type [include_description] represents [include MT]  @@@@@@@@@8E@3include_declarationC;@@@A @@@^@ @@@@./ @! > Values of type [include_declaration] represents [include ME] <  = P@@@@@@@@@UF@/with_constraintC;@@@A@@@@@DRRE@@@@]G@+module_exprC;@@@A@@@@@LYYM @Đ / {2 Value expressions for the module language} Z##[#W@@@@@@@@@sH@0module_expr_descC;@@@A@@@@@b c@@@@{I@)structureC;@@@A @@@_@ @@@@qr@@@@J@.structure_itemC;@@@A@@@@@yzch@@@@K@3structure_item_descC;@@@A@@@@@ jj=1@@@@L@0value_constraintC;@@@A@@@@@?DDD@@@@M@-value_bindingC;@@@A@@@@@OV@ # [let pat : type_constraint = exp]  V@@@@@@@@@N@.module_bindingC;@@@A@@@@@X^]b@ < Values of type [module_binding] represents [module X = ME] _cc_c@@@@@@@@@O@@A@@@@@@@ @@#y~@@@Ш@г'payloady~y~@@ð@@@@ @@#z@@@Ш@г(Locationzz@zz@@@ܰ@@@@ @ @@A@ @@@@@@+B l pB l y@@;@@A@#loc@@@ @@@ ͠@D@@@ @@ @@@@@@@@AВ@г B l  B l @г&string B l | !B l @@ @@@& @@@г'payload ,B l @@$&@@@5'@@Ӡ  ?@@@@@@+Πΰ >H   ?H  %@@;@@AŠ@@@ @@@ @@@@@@@@@Aг $list RH  2@г)attribute ZH  ( [H  1@@U@@@V@@@+ bJ 8 < cJ 8 C@@;@@$PStrՐ @@@ @@ qK F H rK F [@@ S@$PSig֐;@@@ @@ L \ ^ L \ q@r / [: SIG] in an attribute or an extension point  L \ s L \ @@@@@@@ T@$PTypא@@@ @@ M   M  @ - [: T] in an attribute or an extension point  M   M  @@@@@@@ U@$PPatؐ@@@ ֠ @@@ @@@ @@ N  A@ @ [? P] or [? P when E], in an attribute or an extension point  O   O  e@@@@@@@ V@@@A@@@@@R@@@O@#ll K F J K F N@e@гn)structure K F Ro@@uڰp@@@@r@#nn L \ ` L \ d@Y@гp)signature L \ hq@@wr@@@@t rq@qq@@@q@q@#mm M   M  @X@гo)core_type M  p@@vq@@@@s qp@pp@@@p@p@#ll N   N  @N@гn'pattern &N   'N  @@v!@@гs&option 0N  @гw*expression 8N   9N  @@3@@@4@@@@|- L{z@zz@@@z@z@@A@@+Ơư KT   LT  @@;@@)ptyp_desc@@@@@ ڰ XV   YV  @@ qW@(ptyp_loc@@!t@@@ ݰ fW   gW  @@ X@.ptyp_loc_stack@@"@@@  rX   sX  @@ Y@/ptyp_attributes@@@@@  ~Y   Y  4@q7 [... [\@id1] [\@id2]]  Y  6 Y  R@@@@@@@ Z@@@A@@@@@@@@#AA< V  @;@@Ш@гD.core_type_desc V   V  @@L@@O@@ @K@#GG@ W  @?@@Ш@гJ(Location W   W  @Q W   W  @@@Y@@\@@ @V@#RRM X  @L@@Ш@гU.location_stack X   X  @@]ð@@`@@ @\@#XXS Y  '@D@@Ш@г[*attributes Y  ) Y  3@@cհ@@f@@ @b `_@__@@@_@_@@A@c  `_@__@@@_@_  ]\@\\@@@\@\@+ZZ \ Z ^ \ Z l@@;@@(Ptyp_anyݐ@@ ] o q ] o {@ % [_]  ] o } ] o @@@@@@@ 5[@(Ptyp_varސ @@@ @@ *^   +^  @ > A type variable such as ['a]  8^   9^  @@@@@@@ Q\@*Ptyp_arrowߐ )arg_label@@@ @@@ @@@ @@ Q_   R_  @ D  [Ptyp_arrow(lbl, T1, T2)] represents: - [T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]}, - [~l:T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled]}, - [?l:T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional]}.  _`   `g@@@@@@@ x]@*Ptyp_tuple @ ֠ E@@@ @@@ 젠@@@@ @@ @@@ @@ h h@ t i [Ptyp_tuple(tl)] represents a product type: - [T1 * ... * Tn] when [tl] is [(None, T1); ...; (None, Tn)] - [L1:T1 * ... * Ln:Tn] when [tl] is [(Some L1, T1); ...; (Some Ln, Tn)] - A mix, e.g., [L1:T1 * T2] when [tl] is [(Some L1, T1); (None, T2)] Invariant: [n >= 2].  i r@J@@@@@@@ ^@+Ptyp_constrᐠ #loc)Longident!t@@@ ,@@@ . *+@@@ /@@@ 1@@ sKM sK~@ [Ptyp_constr(lident, l)] represents: - [tconstr] when [l=[]], - [T tconstr] when [l=[T]], - [(T1, ..., Tn) tconstr] when [l=[T1 ; ... ; Tn]].  t xU`@@@@@@@ _@+Ptyp_object萠 K@@@ 2@@@ 4 Y+closed_flag@@@ 5@@ yac ya@ ː U [Ptyp_object([ l1:T1; ...; ln:Tn ], flag)] represents: - [< l1:T1; ...; ln:Tn >] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, - [< l1:T1; ...; ln:Tn; .. >] when [flag] is {{!Asttypes.closed_flag.Open}[Open]}.  z @@@@@@@ `@*Ptyp_class鐠 v#locW!t@@@ 6@@@ 8 @@@ 9@@@ ;@@  '@ [Ptyp_class(tconstr, l)] represents: - [#tconstr] when [l=[]], - [T #tconstr] when [l=[T]], - [(T1, ..., Tn) #tconstr] when [l=[T1 ; ... ; Tn]].  (.  @@@@@@@ -a@*Ptyp_aliasꐠ@@@ < #loc @@@ =@@@ ?@@ -  . 5@ , [T as 'a].  ; 7 < H@@@@@@@ Tb@,Ptyp_variant될 Ǡ@@@ @@@@ B +closed_flag@@@ C  ۠ %label@@@ D@@@ F@@@ H@@ dIK eI@ W  [Ptyp_variant([`A;`B], flag, labels)] represents: - [[ `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, and [labels] is [None], - [[> `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Open}[Open]}, and [labels] is [None], - [[< `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, and [labels] is [Some []], - [[< `A|`B > `X `Y ]] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, and [labels] is [Some ["X";"Y"]].  r sFQ@@@@@@@ c@)Ptyp_poly쐠  #loc U@@@ I@@@ K@@@ M @@@ N@@ RT R~@  ['a1 ... 'an. T] Can only appear in the following context: - As the {!core_type} of a {{!pattern_desc.Ppat_constraint}[Ppat_constraint]} node corresponding to a constraint on a let-binding: {[let x : 'a1 ... 'an. T = e ...]} - Under {{!class_field_kind.Cfk_virtual}[Cfk_virtual]} for methods (not values). - As the {!core_type} of a {{!class_type_field_desc.Pctf_method}[Pctf_method]} node. - As the {!core_type} of a {{!expression_desc.Pexp_poly}[Pexp_poly]} node. - As the {{!label_declaration.pld_type}[pld_type]} field of a {!label_declaration}. - As a {!core_type} of a {{!core_type_desc.Ptyp_object}[Ptyp_object]} node. - As the {{!value_description.pval_type}[pval_type]} field of a {!value_description}.    @@@@@@@ d@,Ptyp_package퐠@@@ O@@ !# !A@ / [(module S)].  !C !W@@@@@@@ e@)Ptyp_open J#loc+!t@@@ P@@@ RP@@@ S@@ XZ X@ Ȑ) [M.(T)]  X X@@@@@@@ f@.Ptyp_extension@@@ T@@ D@ 㐠* [[%id]].   @@@@@@@ g@@@A@@@@@U@@@R@# ] o s@@@@  @@@@@@# ^   ^  @@г&string !^  @@ @@@@  3@@@@@@# 2_   3_  @@г ;_   <_  @@ 6@@г)core_type E_   F_  @@ @@@г)core_type O_  @@ I@@@@ B a@@@@@@# `h ah@@г$list jh@В@г&option vh wh@г&string h h@@  z@@@ { @@@г )core_type h h@@ @@@" @@@'  h@@@@  @@@@@@#   sKO sKZ@@г   sKj sKm@г)Longident sK^ sKg@ sKh sKi@@@ @@@$  @@г$list sKz@г)core_type sKp sKy@@# ǰ@@@( Ȱ@@@@   @@@@@@# yae yap@@г$list ya ya@г ,object_field yat ya@@( @@@-  @@г%& ya$@@+ %@@@@' %$@$$@@@$@$@#   @@г"#@г%)Longident!"@,%&@@@4 !@@@: " @@г/$list1#+@г3)core_type9:"@@; 4@@@@ 56@@@@8 .M65@55@@@5@5@#11L M @@г3)core_typeV W (@@; Q@@г89_ 22@г:&stringg +h 1@@B b@@@H c=@@@@? \{=<@<<@@@<@<@#88zIM{IY@@г:$listIgIk@г?)row_fieldI]If@@G @@@L  @@гDEInIy@@K @@гG&optionI=@гK$listII@гPQI|I@@W @@@\  @@@a Q@@@@S ƐQP@PP@@@P@P@#LLRVR_@'@гN$listRnRr@гSTRjRm@гV&stringRcRi@@^ ۰@@@d ܰ @@@i ݰ@@г[)core_typeRu\@@b ]@@@@_ ]\@\\@@@\@\@#XX!%!1@C@гZ,package_type!5[@@a \@@@@^ \[@[[@@@[@[@#WWX\Xe@5@гYZ!Xu"Xx@г\)Longident,Xi-Xr@c0Xs1Xt@@@k ,@@@q - @@гf)core_type<X{g@@m 6h@@@@j /Nhg@gg@@@g@g@#ccMN@O@гe)extensionW @@l Q @@@@i Jihg@gg@@@g@g@@A@ @+  hi@@;@@(ppt_path@@ #loc!t@@@ U@@@ W}~@@h@)ppt_cstrs@@@#loc!t@@@ Z@@@ \@ @@@ ]@@ ^@@@ `2@@i@'ppt_loc@@ !t@@@ c383L@@j@)ppt_attrs@@ J@@@ fMRMh@@k@@@A@@@@@  @@ @#RRE@D@@Ш@гUV@гX)Longident@_@@@g հ@@@m ְ @@p@@ X @d@#``D @C@@Ш@гc$list-1@В@гhi@гk)Longident@r @@@z @@@  @@@гu)core_type"+@@} @@@ @@@ -@@@@ a @~@#zzs!3?@r@@Ш@г}(Location,3A-3I@03J13K@@@ ,@@@@ d /@@#:M[@@@Ш@г*attributesCM]DMg@@ >@@@@ g A@@@A@ 9X  @  @@@ @ @+  WnrXn{@@;@@(prf_desc@@ @@@ lde@@}l@'prf_loc@@!t@@@ ors@@m@.prf_attributes@@ @@@ r~@@n@@@A@@@@@ @@@ @#''"@!@@Ш@г*.row_field_desc@@2 @@5@@ m @1@#--&@%@@Ш@г0(Location@7@@@? @@B@@ p @<@#883@2@@Ш@г;*attributes@@C @@F@@ s @B@@A@ @+  @@;@@$RtagT#locY%label@@@ u@@@ w@@@ xa b@@@ y@@@ {@@@ې 1 [Rtag(`A, b, l)] represents: - [`A] when [b] is [true] and [l] is [[]], - [`A of T] when [b] is [false] and [l] is [[T]], - [`A of T1 & .. & Tn] when [b] is [false] and [l] is [[T1;...Tn]], - [`A of & T1 & .. & Tn] when [b] is [true] and [l] is [[T1;...Tn]]. - The [bool] field is true if the tag contains a constant (empty) constructor. - [&] occurs when several types are used for the same constructor (see 4.2 in the manual)   L V@@@@@@@o@(Rinherit @@@ |@@ W Y 1@+ [[ | t ]]  W r W @@@@@@@*p@@@A@@@@@ B@@@ ?@#NN@#@гPQ"#@гST*+@@Z %@@@` & @@гV$bool56@@^ 0@@г[$list?W@г_)core_typeG H@@g B@@@l Cb@@@@d<[ba@aa@@@a@a@#]]Z W [[ W c@I@г_)core_typed W g @@f ^ @@@@cWvba@aa@@@a@a@@A@ @+  u  v  @@;@@(pof_desc@@ @@@ }    @@q@'pof_loc@@!t@@@     @@r@.pof_attributes@@ ,@@@     @@s@@@A@@@@@ @@@ @#''"  @!@@Ш@г*1object_field_desc    @@2 @@5@@ ~ @1@#--&  @%@@Ш@г0(Location    @7    @@@? @@B@@  @<@#883  @2@@Ш@г;*attributes    @@C Ӱ@@F@@  @B@@A@ @+     !@@;@@$Otagr#locw%label@@@ @@@  w@@@ @@! ! ! !,@@t@(Oinherit @@@ @@ !-!/ '@@"u@@@A@@@@@ *@@@ '@#((! !! !@@г*+! !! ! @г-."! !#! !@@4@@@: @@г0)core_type-! !#1@@7'2@@@@4@#003!-!14!-!9@*@г2)core_type=!-!= Z@@97 [@@@@6@@A@ ]@+ [ [C!]!aD!]!h@@;@@)ppat_desc@@ R@@@ P!q!vQ!q!@@iv@(ppat_loc@@!t@@@ ^!!_!!@@ww@.ppat_loc_stack@@@@@ j!!k!!@@x@/ppat_attributes@@@@@ v!!w!!@i7 [... [\@id1] [\@id2]] !!!"@@@@@@@y@@@A@@@@@  @@ @#AA<!q!@;@@Ш@гD,pattern_desc!q!!q!@@L@@O@@ @K@#GG@!!@?@@Ш@гJ(Location!!!!@Q!!!!@@@Y@@\@@ @V@#RRM!!@L@@Ш@гU.location_stack!!!!@@]@@`@@ @\@#XXS!!@D@@Ш@г[*attributes!!!!@@cͰ@@f@@ @b琠`_@__@@@_@_@@A@ 򐠠  @  @@@ @ @+  """"&@@;@@(Ppat_any@@")"+")"5@2 The pattern [_].  ")"7 ")"N@@@@@@@"z@(Ppat_var#loc@@@ @@@ @@"O"Q"O"i@ A variable pattern such as [x] +"O"k,"O"@@@@@@@D{@*Ppat_aliasQ@@@ #loc@@@ @@@ @@D""E""@7 $ An alias pattern such as [P as 'a] R""S""@@@@@@@k|@-Ppat_constant@@@ @@`""a"#@S @ Patterns such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n] n## o##Q@@@@@@@}@-Ppat_interval@@@ @@@ @@#R#T#R#z@t Patterns such as ['a'..'z']. Other forms of interval are recognized by the parser but rejected by the type-checker. #{##$@@@@@@@~@*Ppat_tuple@u@@@ @@@ @@@@ @@ @@@ 8+closed_flag@@@ @@$$$$Z@  [Ppat_tuple(pl, Closed)] represents - [(P1, ..., Pn)] when [pl] is [(None, P1); ...; (None, Pn)] - [(~L1:P1, ..., ~Ln:Pn)] when [pl] is [(Some L1, P1); ...; (Some Ln, Pn)] - A mix, e.g. [(~L1:P1, P2)] when [pl] is [(Some L1, P1); (None, P2)] [Ppat_tuple(pl, Open)] is similar, but indicates the pattern additionally ends in a [..]. Invariant: - If Closed, [n >= 2]. - If Open, [n >= 1]. $[$a&d&l@@@@@@@@.Ppat_constructV#loc7!t@@@ @@@ B@go#loc@@@ @@@ @@@ @@@@ @@ @@@ @@&m&o&m&@ g [Ppat_construct(C, args)] represents: - [C] when [args] is [None], - [C P] when [args] is [Some ([], P)] - [C (P1, ..., Pn)] when [args] is [Some ([], Ppat_tuple [P1; ...; Pn])] - [C (type a b) P] when [args] is [Some ([a; b], P)]   && ((*@@@@@@@"@,Ppat_variant %label@@@ ~9@@@ @@@ @@"(+(-#(+(U@ [Ppat_variant(`A, pat)] represents: - [`A] when [pat] is [None], - [`A P] when [pat] is [Some P] 0(V(\1((@@@@@@@I@+Ppat_record @#loc!t@@@ @@@ @l@@@ @@ @@@ +closed_flag@@@ @@[((\()(@N B [Ppat_record([(l1, P1) ; ... ; (ln, Pn)], flag)] represents: - [{ l1=P1; ...; ln=Pn }] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]} - [{ l1=P1; ...; ln=Pn; _}] when [flag] is {{!Asttypes.closed_flag.Open}[Open]} Invariant: [n > 0] i)))/j*k*v@@@@@@@@*Ppat_array @@@ @@@ @@|*w*y}*w*@o= Pattern [[| P1; ...; Pn |]] *w**w*@@@@@@@@'Ppat_or @@@ Ġ@@@ @@****@3 Pattern [P1 | P2] ****@@@@@@@@/Ppat_constraint @@@ Ơ9@@@ @@ ** *+@3 Pattern [(P : T)]  *+! *+9@@@@@@@@)Ppat_type\#loc =!t@@@ @@@ @@!+:+<!+:+Z@Ր3 Pattern [#tconst] !+:+\!+:+t@@@@@@@ @)Ppat_lazy@@@ @@"+u+w"+u+@񐠠2 Pattern [lazy P]  "+u+ "+u+@@@@@@@%@+Ppat_unpack#loc@@@ @@@ @@@ @@%#++&#++@  [Ppat_unpack(s)] represents: - [(module P)] when [s] is [Some "P"] - [(module _)] when [s] is [None] Note: [(module P : S)] is represented as [Ppat_constraint(Ppat_unpack(Some "P"), Ptyp_package S)] 3$++4*,,@@@@@@@L@.Ppat_exceptionY@@@ @@A+,,B+,,@47 Pattern [exception P] O+,,P+,-@@@@@@@h@+Ppat_effectu@@@ Ҡz@@@ @@b,--c,--8@@{@.Ppat_extension@@@ @@p--T-Vq--T-s@c1 Pattern [[%id]] ~--T-u--T-@@@@@@@@)Ppat_open#loc !t@@@ @@@ נ@@@ @@.--@1 Pattern [M.(P)] .--.--@@@@@@@@@@A@@@@@@@@@#")"-@@@@@@@@@@#"O"S"O"[@@г"O"f@г&string"O"_"O"e@@˰@@@̰@@@@䐠@@@@@@#""""@@г'pattern""""@@@@г""@г&string""""@@@@@@@@@@@@@@@#""""@@г(constant""@@@@@@-@@@@@@#,#R#V-#R#c@@г(constant6#R#g7#R#o@@1@@г(constant@#R#r@@:@@@@ 3R@@@@@@#Q$$R$$!@@г$list[$$?\$$C@В@г &optionh$$-i$$3@гǠ&stringq$$&r$$,@@l@@@m @@@г̠'pattern}$$6~$$=@@x@@@y@@@z$$%'@@гӠ(Asttypes$$F$$N@ڰ$$O@@@@@@@ܠ@@@@@@#ՠհ&m&q&m&@@гנذ&m&&m&@гڠ)Longident&m&&m&@&m&&m&@@@@@@ @@г䠐&option&m&@В@г蠐$list&m&&m&@г&m&&m&@г&string&m&&m&@@ް@@@߰ @@@@@@г'pattern&m&&m&@@@@@@@@&m&@@@@@@@@@@#(+(/(+(;@@г(+(?(+(D@@ @@г&option(+(O@г'pattern (+(G!(+(N@@@@@ @@@@4@@@@@@#3((4((@@г$list=()>()@В@гI()J() @г)LongidentT((U()@ X()Y()@@@T@@@U @@@г'patterne() f()@@`@@@+a@@@0bj((-@@гq()@@k@@@@d@@@@@@#*w*{*w*@@г$list*w*@г'pattern*w**w*@@ @@@%@@@@@@@@@@#****@@г'pattern****@@ @@г'pattern**@@$@@@@!͐@@@@@@# ** *+@@г'pattern *+  *+@@$Ѱ@@г!)core_type *+"@@(ڰ#@@@@%򐠠#"@""@@@"@"@#!+:+>!+:+G@@г !!+:+W@г")Longident!+:+K!+:+T@)!+:+U !+:+V@@@1@@@7 *@@@@,*)@))@@@)@)@#%%"+u+y"+u+@@г''pattern&"+u+(@@. )@@@@+8)(@((@@@(@(@#$$7#++8#++@@г&'@#++@г(&optionH#++I#++@г-&stringQ#++R#++@@5L@@@:M @@@@N0@@@@2Gf0/@//@@@/@/@#++e+,,f+,,@@г-'patterno+,,.@@4i/@@@@1b/.@..@@@.@.@#**,--,--#@@г,'pattern,--',--.@@4@@г1'pattern,--12@@83@@@@5@#11--T-X--T-f@@г3)extension--T-j4@@:5@@@@754@44@@@4@4@#00.--.--@@г23.--.--@г5)Longident.--.--@<.--.--@@@Dɰ@@@Jʰ @@г?'pattern.--@@FӰ@@@@C될BA@AA@@@A@A@@A@@+2--2--@@;@@)pexp_desc@@@@@ ٰ4.. 4..%@@@(pexp_loc@@U!t@@@ ܰ5.&.+5.&.@@@@.pexp_loc_stack@@@@@ ߰6.A.F6.A.e@@*@/pexp_attributes@@@@@ 7.f.k7.f.@7 [... [\@id1] [\@id2]] +7.f.,7.f.@@@@@@@D@@@A@@@@@&#@@@#AA<34..@;@@Ш@гD/expression_desc<4..=4..$@@L7@@O@@ :@K@#GG@E5.&.3@?@@Ш@гJ(LocationP5.&.5Q5.&.=@QT5.&.>U5.&.?@@@YP@@\@@ S@V@#RRM^6.A.T@L@@Ш@гU.location_stackg6.A.Vh6.A.d@@]b@@`@@ e@\@#XXSp7.f.z@D@@Ш@г[*attributesy7.f.|z7.f.@@ct@@f@@ w@bo`_@__@@@_@_@@A@~@~~@@@~@~@+||:..:..@@;@@*Pexp_ident)#loc !t@@@ @@@ @@;..;..@ , Identifiers such as [x] and [M.x] <..=//@@@@@@@@-Pexp_constant:@@@ @@>//>//:@ X Expressions constant such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n] ?/;/A@//@@@@@@@@(Pexp_leti(rec_flag@@@ kc@@@ @@@ @@@ @@A//A//@ꐠ O [Pexp_let(flag, [(P1,E1) ; ... ; (Pn,En)], E)] represents: - [let P1 = E1 and ... and Pn = EN in E] when [flag] is {{!Asttypes.rec_flag.Nonrecursive}[Nonrecursive]}, - [let rec P1 = E1 and ... and Pn = EN in E] when [flag] is {{!Asttypes.rec_flag.Recursive}[Recursive]}. B//G1)14@@@@@@@@-Pexp_function@@@ @@@ ~@@@ @@@ @@@ @@'H1517(I1J1@  [Pexp_function ([P1; ...; Pn], C, body)] represents any construct involving [fun] or [function], including: - [fun P1 ... Pn -> E] when [body = Pfunction_body E] - [fun P1 ... Pn -> function p1 -> e1 | ... | pm -> em] when [body = Pfunction_cases [ p1 -> e1; ...; pm -> em ]] [C] represents a type constraint or coercion placed immediately before the arrow, e.g. [fun P1 ... Pn : ty -> ...] when [C = Some (Pconstraint ty)]. A function must have parameters: in [Pexp_function (params, _, body)], if [params] does not contain a [Pparam_val _], [body] must be [Pfunction_cases _]. 5J116W44@@@@@@@N@*Pexp_apply=@@@ Ơ@)arg_label@@@ @Q@@@ @@ @@@ @@XX44YX44Y@K  [Pexp_apply(E0, [(l1, E1) ; ... ; (ln, En)])] represents [E0 ~l1:E1 ... ~ln:En] [li] can be {{!Asttypes.arg_label.Nolabel}[Nolabel]} (non labeled argument), {{!Asttypes.arg_label.Labelled}[Labelled]} (labelled arguments) or {{!Asttypes.arg_label.Optional}[Optional]} (optional argument). Invariant: [n > 0] fY4Z4`gb55@@@@@@@@*Pexp_matchn@@@ Y@@@ @@@ @@~c55c56@q + [match E0 with P1 -> E1 | ... | Pn -> En] d66#d66S@@@@@@@@(Pexp_try@@@ @@@ @@@ @@e6T6Ve6T6z@ ) [try E0 with P1 -> E1 | ... | Pn -> En] f6{6f6{6@@@@@@@@*Pexp_tuple >@)@@@ @@@ @@@@ @@ @@@ @@g66g66@ǐ \ [Pexp_tuple(el)] represents - [(E1, ..., En)] when [el] is [(None, E1); ...; (None, En)] - [(~L1:E1, ..., ~Ln:En)] when [el] is [(Some L1, E1); ...; (Some Ln, En)] - A mix, e.g., [(~L1:E1, E2)] when [el] is [(Some L1, E1); (None, E2)] Invariant: [n >= 2] h66q8A8K@@@@@@@@.Pexp_construct!r#locS!t@@@ @@@ ^@@@ @@@ @@r8L8Nr8L8@ [Pexp_construct(C, exp)] represents: - [C] when [exp] is [None], - [C E] when [exp] is [Some E], - [C (E1, ..., En)] when [exp] is [Some (Pexp_tuple[E1;...;En])] s88w9m9w@@@@@@@)@,Pexp_variant"%label@@@ "@@@ @@@ @@)x9x9z*x9x9@ [Pexp_variant(`A, exp)] represents - [`A] when [exp] is [None] - [`A E] when [exp] is [Some E] 7y998|:):4@@@@@@@P@+Pexp_record#à@#loc!t@@@ @@@ @U@@@ @@ @@@  _@@@ @@@ @@f}:5:7g}:5:@Y [Pexp_record([(l1,P1) ; ... ; (ln,Pn)], exp0)] represents - [{ l1=P1; ...; ln=Pn }] when [exp0] is [None] - [{ E0 with l1=P1; ...; ln=Pn }] when [exp0] is [Some E0] Invariant: [n > 0] t~::u;n;y@@@@@@@@*Pexp_field$|@@@  #loc!t@@@ @@@ !@@;z;|;z;@' [E.l] ;z;;z;@@@@@@@@-Pexp_setfield%@@@ "2#loc!t@@@ #@@@ %@@@ &@@;;;;@. [E1.l <- E2] ;;;<@@@@@@@@*Pexp_array&W@@@ '@@@ )@@<<<<1@ѐ5 [[| E1; ...; En |]] <<3<7 [while E1 do E2 done] Y<=Z<=;@@@@@@@r@(Pexp_for*@@@ 3f@@@ 4k@@@ 5.direction_flag@@@ 6v@@@ 7@@|=<=>}=<=@o 5 [Pexp_for(i, E1, E2, direction, E3)] represents: - [for i = E1 to E2 do E3 done] when [direction] is {{!Asttypes.direction_flag.Upto}[Upto]} - [for i = E1 downto E2 do E3 done] when [direction] is {{!Asttypes.direction_flag.Downto}[Downto]} ==>>@@@@@@@@/Pexp_constraint+@@@ 8@@@ 9@@>>>>@+ [(E : T)] >>>? @@@@@@@@+Pexp_coerce,@@@ :=@@@ ;@@@ =C@@@ >@@? ?? ?I@ [Pexp_coerce(E, from, T)] represents - [(E :> T)] when [from] is [None], - [(E : T0 :> T)] when [from] is [Some T0]. ?J?P??@@@@@@@@)Pexp_send-@@@ ?k#locp%label@@@ @@@@ B@@???@@㐠) [E # m] ?@?@)@@@@@@@@(Pexp_new.#loco!t@@@ C@@@ E@@@*@,@*@I@+ [new M.c] "@*@K#@*@[@@@@@@@;@/Pexp_setinstvar/#loc%label@@@ F@@@ H6@@@ I@@<@\@^=@\@@/* [x <- 2] J@\@K@\@@@@@@@@c@-Pexp_override0֠@#loc%label@@@ J@@@ L@g@@@ M@@ N@@@ P@@n@@o@@@a? [{< x1 = E1; ...; xn = En >}] |@@}@@@@@@@@@@0Pexp_struct_item1@@@ Q@@@ R@@@@@A,@/ [let SI in E] A-A3A-AG@@@@@@@@+Pexp_assert2@@@ S@@AHAJAHAe@ j [assert E]. Note: [assert false] is treated in a special way by the type-checker. AfAlAA@@@@@@@@)Pexp_lazy3@@@ T@@AAAA@* [lazy E] AAAB@@@@@@@@)Pexp_poly4@@@ UIg@@@ V@@@ X@@B B B B7@ Used for method bodies. Can only be used as the expression under {{!class_field_kind.Cfk_concrete}[Cfk_concrete]} for methods (not values). B8B>BB@@@@@@@@+Pexp_object56@@@ Y@@ BB BC@2 [object ... end] BCBC.@@@@@@@0@,Pexp_newtype6#loc@@@ Z@@@ \*@@@ ]@@0C/C11C/CZ@#5 [fun (type t) -> E] >C/C\?C/Cv@@@@@@@W@)Pexp_pack7@@@ ^@@@ _@@@ a@@VCwCyWCwC@I % [(module ME)] or [(module ME : S)]. dCCeCC@@@@@@@}@*Pexp_letop88@@@ b@@rCCsCC@e I - [let* P = E0 in E1] - [let* P0 = E00 and* P1 = E01 in E1] CCDDG@@@@@@@@.Pexp_extension9;@@@ c@@DHDJDHDg@) [[%id]] DHDiDHDw@@@@@@@@0Pexp_unreachable:@@DxDz@% [.] DxDDxD@@@@@@@@@@A@@@@@@@@@#;..;..@@г;..@г)Longident;..;..@%;..;..@@@-Ͱ@@@3ΰ &@@@@(搠&%@%%@@@%@%@#!!>//!>//.@ @г#(constant>//2$@@*%@@@@'%$@$$@@@$@$@#  A//A//@@г"# A// A//@@)@@г%$listA//A//@г*-value_bindingA//A//@@2@@@7 @@г/*expression'A//0@@6!1@@@@3910@00@@@0@0@#,,8H15199H151F@@г.$listBI1J1_CI1J1c@г3.function_paramKI1J1PLI1J1^@@;F@@@@G @@г8&optionVI1J1vWI1J1|@г=/type_constraint_I1J1f`I1J1u@@EZ@@@J[ @@гB-function_bodyjI1J1C@@IdD@@@@F]|DC@CC@@@C@C@#??{X44!|X44+@@гA*expressionX44/X449@@I@@гF$listX44U7@В@гJKX44=X44F@@Q@@@гM*expressionX44IX44S@@U@@@a@@@fX44<R@@@@TRQ@QQ@@@Q@Q@#MMc55c56@.@гO*expressionc56c56@@W@@гT$listc56P@гX$casec56c56@@`Ѱ@@@eҰ[@@@@]ꐠ[Z@ZZ@@@Z@Z@#VVe6T6Xe6T6`@7@гX*expressione6T6de6T6n@@`@@г]$liste6T6vY@гa$case e6T6q e6T6u@@i@@@nd@@@@f dc@cc@@@c@c@#__ g66 g66@6@гa$list "g66N@В@гe&option .g66 /g66@гj&string 7g66 8g66@@r2@@@w3 @@@гo*expression Cg66 Dg66@@w>@@@?@@@@ Hg66t@@@@v: Yts@ss@@@s@s@#oo Xr8L8P Yr8L8^@H@гqr ar8L8n br8L8q@гt)Longident lr8L8b mr8L8k@{ pr8L8l qr8L8m@@@l@@@m @@г~&option |r8L8z@г*expression r8L8t r8L8~@@@@@@@@@y @@@@@@# x9x9| x9x9@`@г x9x9 x9x9@@@@г&option x9x9@г*expression x9x9 x9x9@@@@@@@@@ Ɛ@@@@@@# }:5:9 }:5:D@Q@г$list }:5:g }:5:k@В@г }:5:U }:5:X@г)Longident }:5:I }:5:R@ }:5:S }:5:T@@@@@@ @@@г*expression }:5:[ }:5:e@@@@@@@@ }:5:H-@@г&option!}:5:y@г*expression! }:5:n! }:5:x@@@@@@@@@! @@@@@@#!;z;~! ;z;@@г*expression!);z;!*;z;@@$@@г!2;z;@г)Longident!<;z;!=;z;@!@;z;!A;z;@@@<@@@= @@@@6!U@@@@@@#!T;;!U;;@@г*expression!^;;!_;;@@Y@@г!g;;!h;;@г)Longident!r;;!s;;@!v;;!w;;@@@r@@@s @@гĠ*expression!;;@@|@@@@Ƞu!@@@@@@#!<<!<<@@гà$list!<<-@гǠ*expression!<<"!<<,@@@@@@@@@̠!@@@@@@#ŠŰ!>"~>>@@г*expression">>">>@@@@г)core_type">>@@@@@@ "@@@@@@#"? ?"? ?@@г*expression"? ? "? ?*@@@@г&option"? ?7"? ?=@г)core_type"? ?-"? ?6@@@@@  @@г)core_type"? ?@@@İ@@@@ "ܐ@@@@@@#"??"??@@г*expression"?@"?@ @@@@г"?@@г"?@"?@@@@@@@@@@  # @@@@@@##@*@.# @*@6@@г#@*@F@г)Longident#@*@:#@*@C@#@*@D# @*@E@@@@@@ @@@@!#4@@@@@@#  #3@\@`#4@\@o@@г  #<@\@y#=@\@|@г#D@\@s#E@\@x@@?@@@@ @@г*expression#O@\@@@I@@@@!B#a@@@@@@##`@@#a@@@@г$list#j@@@В@г#u@@#v@@@г#}@@#~@@@@x@@@%y @@@г*expression#@@#@@@@#@@@5@@@:#@@ @@@@"!# @@@@@@##@@#@A @@г.structure_item#@A#@A@@%@@г"*expression#@A"#@@)$@@@@&!#Đ$#@##@@@#@#@##AHAL#AHAW@ @г!*expression#AHA["@@(ǰ#@@@@%!#ߐ#"@""@@@"@"@##AA#AA@ @г *expression#AA!@@'"@@@@$!#"!@!!@@@!@!@##B B #B B@@г*expression$B B$B B$@@'@@г$&option$ B B1 @г()core_type$B B'$B B0@@0 @@@5 +@@@@-" $)+*@**@@@*@*@#&&$(BB$)BC@@г(/class_structure$2BC)@@/ ,*@@@@,"%$D*)@))@@@)@)@#%%$CC/C3$DC/C?@@г'($LC/CJ$MC/CM@г*&string$UC/CC$VC/CI@@2 P@@@8 Q @@г/*expression$`C/CP0@@6 Z1@@@@3"S$r10@00@@@0@0@#,,$qCwC{$rCwC@ @г.+module_expr${CwC$|CwC@@6 v@@г3&option$CwC/@г7,package_type$CwC$CwC@@? @@@D :@@@@<"$:9@99@@@9@9@#55$CC$CC@ @г7%letop$CC8@@> 9@@@@;"$98@88@@@8@8@#44$DHDL$DHDZ@@г6)extension$DHD^7@@= 8@@@@:"$א87@77@@@7@7@#33$DxD|@#@@@4"$萠32@22@@@2@2@@A@@+àð$DD$DD@@;@@&pc_lhs;@@ @@@ d$DD$DD@@% @(pc_guard<@@$a@@@ g@@@ i%DD%DD@@%@&pc_rhs=@@ @@@ l%DD%DD@@%*@@@A@@@@@@@@#**%%DD@$@@Ш@г-'pattern%"DD%#DD@@5!@@8@@ e! @4@#00&%+DD@%@@Ш@г3&option%4DD%5DD@г8*expression%=DD%>DD@@@!8@@@E!9 @@H@@ j!<@?@#;;6%GDD@5@@Ш@г>*expression%PDD%QDD@@F!K@@I@@ m!N@E@@A@ /#F%e - ,@ , ,@@@ ,@ ,@+ * *%dELEP%eELEU@@;@@$let_>@@ /@@@ o%qE\E`%rE\Er@@%@$ands?@@$ ?@@@ r@@@ t%EsEw%EsE@@%@$body@@@ @@@ w%EE%EE@@%@@@A@@@@@ U@@@ R@#**%%E\Ed@$@@Ш@г-*binding_op%E\Eg%E\Eq@@5!@@8@@ p!@4@#00&%EsE{@%@@Ш@г3$list%EsE%EsE@г8*binding_op%EsE~%EsE@@@!@@@E! @@H@@ u!@?@#;;6%EE@5@@Ш@г>*expression%EE%EE@@F!Ȱ@@I@@ x!@E@@A@ @+  %EE%EE@@;@@'pbop_opA@@$e#loc%@@@ z@@@ |%EE%EE@@&@(pbop_patB@@! @@@ %EE%EE@@&@(pbop_expC@@ @@@ &EE&EF @@&@(pbop_locD@@$_!t@@@ &F F&F F'@@&(@@@A@@@@@ @@@ @#99.&EE@-@@Ш@г<=&EE& EE@г?&string&(EE&)EE@@G"#@@@M"$ @@P@@ }"'@F@#BB=&2EE@<@@Ш@гE'pattern&;EE&<EE@@M"6@@P@@ "9@L@#HHC&DEE@B@@Ш@гK*expression&MEF&NEF @@S"H@@V@@ "K@R@#NNG&VF F@F@@Ш@гQ(Location&aF F&bF F$@X&eF F%&fF F&@@@`"a@@c@@ "d@]@@A@!'@+!%!%&oF-F1&pF-FD@@;@@*Pparam_valE%)arg_label@@@ %!@@@ @@@ !@@@ @@&FGFI&FGF@$ \ [Pparam_val (lbl, exp0, P)] represents the parameter: - [P] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]} and [exp0] is [None] - [~l:P] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]} and [exp0] is [None] - [?l:P] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [None] - [?l:(P = E0)] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [Some E0] Note: If [E0] is provided, only {{!Asttypes.arg_label.Optional}[Optional]} is allowed. &FF&HH@@@@@@@&@.Pparam_newtypeF%,#loc&{@@@ @@@ @@&HH!c@$ N [Pparam_newtype x] represents the parameter [(type x)]. [x] carries the location of the identifier, whereas the [pparam_loc] on the enclosing [function_param] node is the location of the [(type x)] as a whole. Multiple parameters [(type a b c)] are represented as multiple [Pparam_newtype] nodes, let's say: {[ [ { pparam_kind = Pparam_newtype a; pparam_loc = loc1 }; { pparam_kind = Pparam_newtype b; pparam_loc = loc2 }; { pparam_kind = Pparam_newtype c; pparam_loc = loc3 }; ] ]} Here, the first loc [loc1] is the location of [(type a b c)], and the subsequent locs [loc2] and [loc3] are the same as [loc1], except marked as ghost locations. The locations on [a], [b], [c], correspond to the variables [a], [b], and [c] in the source code. &II&LWL[@@@@@@@&@@@A@@@@@!t@@@!q@#NN&FGFK&FGFU@)@гPQ&FGFY&FGFb@@W"ɰ@@гS&option&FGFp&FGFv@гX*expression&FGFe&FGFo@@`"ܰ@@@e"ݰ @@г]'pattern&FGFy^@@d"_@@@@a$&_^@^^@@@^@^@#ZZ&HH&HH@@@г\]'HI!@г^&string'HH'HI@@f# @@@l# !@@@@c%'"ba@aa@@@a@a@@A@!@+!Ϡ!ϰ'!L]La'"L]Lo@@;@@*pparam_locG@@%!t@@@ '0LrLv'1LrL@@'I@+pparam_descH@@!@@@ '<LL'=LL@@'U@@@A@@@@@!@@@!@#'DLrL@@@Ш@г(Location'OLrL'PLrL@%'SLrL'TLrL@@@-#O@@0@@ #R@*@#&&!']LL@ @@Ш@г)3function_param_desc'fLL'gLL@@1#a@@4@@ #d@0@@A@"@+""'oLL'pLL@@;@@.Pfunction_bodyI"x@@@ @@'~LL'LL@@'@/Pfunction_casesJ' "l@@@ @@@ %!t@@@ #-@@@ @@'LL"@@%  In [Pfunction_cases (_, loc, attrs)], the location extends from the start of the [function] keyword to the end of the last case. The compiler will only use typechecking-related attributes from [attrs], e.g. enabling or disabling a warning. 'M+M-'N3N7@@@@@@@'@@@A@@@@@"Q"N@@"@@#;;'LL'LL@4@г=*expression'LL>@@D#?@@@@A@#=='LL'LM@@г?$list'LM 'LM@гD$case'LM'LM @@L#а@@@Q#Ѱ @@гI(Location'LM'LM@P'LM'LM@@@X#@@гS*attributes'LM "@@Z#"@@@@W%(VU@UU@@@U@U@@A@"%(""@""@@@"@"@+""( NN(NN@@;@@+PconstraintK#@@@ @@(NN(NN@@(5@'PcoerceL'#@@@ @@@ #@@@ @@(4NN"@&& G See the comment on {{!expression_desc.Pexp_function}[Pexp_function]}. (ANN(BNO1@@@@@@@(Z@@@A@@@@@"@@@"@#44(INN(JNN@-@г6)core_type(SNN7@@=$M8@@@@:@#66(YNN(ZNN@@г8&option(cNN(dNN@г=)core_type(lNN(mNN@@E$g@@@J$h @@гB)core_type(wNN#@@I$q#@@@@F&j(ED@DD@@@D@D@@A@#@+##( OROV( OROg@@;@@)pval_nameM@@'#loc(f@@@ @@@ ( OpOu( OpO@@(@)pval_typeN@@$"@@@ (OO(OO@@(@)pval_primO@@(1(@@@ @@@ (OO(OO@@(@/pval_attributesP@@$T@@@ (OO(OO@&; [... [\@\@id1] [\@\@id2]] (OO(OP@@@@@@@(@(pval_locQ@@'0!t@@@ (PP (PP"@@(@@@A@@@@@#i#f@@#J@#XXM( OpO~@L@@Ш@г[\( OpO( OpO@г^&string( OpO( OpO@@f$@@@l$ @@o@@ $@e@#aa\)OO@[@@Ш@гd)core_type) OO) OO@@l%@@o@@ % @k@#gg])OO@\@@Ш@гj$list)OO)OO@гo&string)'OO)(OO@@w%"@@@|%# @@@@ %&@v@#rrm)1OO@^@@Ш@гu*attributes):OO);OO@@}%5@@@@ %8@|'0)Ozy@yy@@@y@y@#uun)NPP@m@@Ш@гx(Location)YPP)ZPP@)]PP )^PP!@@@%Y@@@@ %\@@@A@#頰)t)s##@##@@@#@#栰'_)~##@##@@@#@#@+##)}QMQQ)~QMQa@@;@@*ptype_nameR@@( #loc)[@@@ @@@ )QjQo)QjQ@@)@,ptype_paramsS@@)@%@@@ @@(0(variance@@@  @(7+injectivity@@@ @@ @@ @@@ ǰ)QQ)QQ@'2 [('a1,...'an) t] ) QQ) QQ@@@@@@@)@+ptype_cstrsT@@)O@%T@@@ ʠ@%Z@@@ ˠ@(7!t@@@ @@ @@@ ϰ)!QQ)!QR!@'ې 0 [... constraint T1=T1' ... constraint Tn=Tn'] )"R"R()"R"R]@@@@@@@*@*ptype_kindU@@$B@@@ Ұ*#R^Rc*#R^Ry@@*@-ptype_privateV@@(,private_flag@@@ հ*$RzR*$RzR@(5 for [= private ...] *$RzR*$RzR@@@@@@@*6@.ptype_manifestW@@)%@@@ @@@ ڰ*.%RR*/%RR@(!2 represents [= T] *<%RR*=%RR@@@@@@@*U@0ptype_attributesX@@%@@@ ݰ*H&RR*I&RS@(;; [... [\@\@id1] [\@\@id2]] *V&RS*W&RS<@@@@@@@*o@)ptype_locY@@(!t@@@ *d'S=SB*e'S=SX@@*}@@@A@@@@@$$@@$@#*lQjQy@@@Ш@гꠐ*tQjQ*uQjQ@г&string*}QjQ{*~QjQ@@&x@@@&y @@@@ &|@@#*QQ@@@Ш@г$list*QQ*QQ@В@г)core_type*QQ*QQ@@&@@@В@г*QQ*QQ@@&@@@г*QQ*QQ@@&@@@&@@@&*QQ@@@$&*QQ,@@(@@ &@ (*ϐ@@@@@@#*!QQ@@@Ш@г$list*!QR*!QR @В@г )core_type*!QQ*!QR@@&߰@@@г)core_type*!QR*!QR @@&@@@г(Location*!QR*!QR@+!QR+!QR@@@#&@@@4&!@@@9&+!QQ/@@=@@ '@"(+ @@@@@@#+#R^Rm@@@Ш@г)type_kind+!#R^Ro+"#R^Rx@@&'@@)@@ '@%@#!!+*$RzR@ @@Ш@г$%+2$RzR+3$RzR@@+'-@@.@@ '0@))(+G'&@&&@@@&@&@#""+F%RR@ @@Ш@г%&option+O%RR+P%RR@г*)core_type+X%RR+Y%RR@@2'S@@@7'T @@:@@ 'W@1)O+n/.@..@@@.@.@#**%+m&RS @@@Ш@г-*attributes+v&RS+w&RS@@5'q@@8@@ 't@4)l+21@11@@@1@1@#--&+'S=SK@%@@Ш@г0(Location+'S=SM+'S=SU@7+'S=SV+'S=SW@@@?'@@B@@ '@<@@A@&++%%@%%@@@%@%)+%%@%%@@@%@%@+%%+CXX+CXX@@;@@.Ptype_abstractZ@@+DX X"+DX X2@@+@-Ptype_variant[+O%@@@ @@@ @@+EX3X5+EX3Xd@@+@,Ptype_record\+b& @@@ @@@ @@+FXeXg+FXeX@)ܐ; Invariant: non-empty list +FXeX+FXeX@@@@@@@,@*Ptype_open]@@,GXX,GXX@@,@.Ptype_external^+@@@ @@,HXX&K@@,&@@@A@@@@@&N@@@&K@#TT,DX X$R@Q@@@U@#QQ,EX3X7,EX3XD@E@гS$list,%EX3X`O@гW7constructor_declaration,-EX3XH,.EX3X_@@_((@@@d()Z@@@@\@#XX,5FXeXi,6FXeXu@>@гZ$list,?FXeXV@г^1label_declaration,GFXeXy,HFXeX@@f(B@@@k(Ca@@@@c*<,[a`@``@@@`@`@#\\,ZGXXZ@Y@@@]@#YY,`HXX,aHXX@S@г[&string,jHXX&@@b(d&@@@@_@@A@&@+&&,pJXX,qJXX@@;@@(pld_name_@@*#loc,N@@@ @@@ ,LXY,LXY@@,@+pld_mutable`@@+,mutable_flag@@@ ,MYY,MYY7@@,@(pld_typea@@(@@@ ,NY8Y=,NY8YQ@@,@'pld_locb@@*!t@@@ ,OYRYW,OYRYk@@,@.pld_attributesc@@(F@@@ ,PYlYq,PYlY@*9 [l : T [\@id1] [\@id2]] ,PYlY,PYlY@@@@@@@,@@@A@@@@@&&@@&@#TTI,LXY @H@@Ш@гWX,LXY,LXY@гZ&string,LXY ,LXY@@b(ذ@@@h(ٰ @@k@@ (@a@#]]W,MYY(@V@@Ш@г`a,MYY*,MYY6@@g(@@j@@ (@e@#aa\,NY8YE@[@@Ш@гd)core_type-NY8YG-NY8YP@@l(@@o@@ (@k@#gg`- OYRY^@_@@Ш@гj(Location-OYRY`-OYRYh@q-OYRYi-OYRYj@@@y)@@|@@ )@v@#rrm-#PYlY@^@@Ш@гu*attributes-,PYlY--PYlY@@})'@@@@ )*@|+"-Azy@yy@@@y@y@@A@'r+--L'p'o@'o'o@@@'o@'o@+'m'm-K][v[z-L][v[@@;@@(pcd_named@@+#loc-)@@@ @@@ -^_[[-__[[@@-w@(pcd_varse@@,+#loc-?@@@ @@@ @@@ -u`[[-v`[[@@-@(pcd_argsf@@'@@@ -a[[-a[[@@-@'pcd_resg@@,) @@@ @@@ -b[\-b[\@@-@'pcd_loch@@+!t@@@ -c\\ -c\\4@@-@.pcd_attributesi@@)<@@@ -d\5\:-d\5\U@+< [C of ... [\@id1] [\@id2]] -d\5\W-d\5\x@@@@@@@-@@@A@@@@@'@@@'@#ood-_[[@c@@Ш@гrs-_[[-_[[@гu&string-_[[-_[[@@})ΰ@@@)ϰ @@@@ )@|@#xxh-`[[@g@@Ш@г{$list-`[[-`[[@г-`[[-`[[@г&string-`[[-`[[@@)@@@) @@@)@@@@ )@@#.a[[@@@Ш@г5constructor_arguments. a[[. a[[@@*@@@@ * @@#.b[\@@@Ш@г&option.b[\.b[\@г)core_type.&b[\ .'b[\@@*!@@@*" @@@@ *%@@#.0c\\'@@@Ш@г(Location.;c\\).<c\\1@.?c\\2.@c\\3@@@*;@@@@ *>@@#.Id\5\H@@@Ш@г*attributes.Rd\5\J.Sd\5\T@@*M@@@@ *P@,H.g@@@@@@@A@(@+((.fg\\.gg\\@@;@@+Pcstr_tuplej-)@@@ @@@ @@.zh\\.{h\\@@.@,Pcstr_recordk.(@@@ !@@@ #@@.i\\(@,  Values of type {!constructor_declaration} represents the constructor arguments of: - [C of T1 * ... * Tn] when [res = None], and [args = Pcstr_tuple [T1; ... ; Tn]], - [C: T0] when [res = Some T0], and [args = Pcstr_tuple []], - [C: T1 * ... * Tn -> T0] when [res = Some T0], and [args = Pcstr_tuple [T1; ... ; Tn]], - [C of {...}] when [res = None], and [args = Pcstr_record [...]], - [C: {...} -> T0] when [res = Some T0], and [args = Pcstr_record [...]]. .j\\.v__@@@@@@@.@@@A@@@@@(@@@(@#44.h\\.h\\@(@г6$list.h\\2@г:)core_type.h\\.h\\@@B*@@@G*=@@@@?@#;;.i\\.i\\@"@г=$list.i\\(@гA1label_declaration.i\\.i\\@@I*ɰ@@@N*ʰ(@@@@F,.␠ED@DD@@@D@D@@A@(@+((.x__.x__@@;@@+ptyext_pathl@@-p#loc#Q!t@@@ $@@@ &.z__.z__@@/@-ptyext_paramsm@@.@*@@@ )@@-(variance@@@ *@-+injectivity@@@ +@@ ,@@ -@@@ //{__/{_` @@/6@3ptyext_constructorsn@@.))@@@ 2@@@ 4/.|` `//|` `B@@/G@.ptyext_privateo@@-,private_flag@@@ 7/;}`C`H/<}`C`e@@/T@*ptyext_locp@@-!t@@@ :/I~`f`k/J~`f`@@/b@1ptyext_attributesq@@*@@@ =/U``/V``@-H9 ... [\@\@id1] [\@\@id2] /c``/d``@@@@@@@/|@@@A@@@@@)v)s@@)e@#u/kz__@t@@Ш@г/sz__/tz__@г)Longident/~z__/z__@/z__/z__@@@+~@@@+ @@@@ '+@@#p/{__@o@@Ш@г$list/{_`/{_` @В@г)core_type/{__/{__@@+@@@В@г/{__/{__@@+@@@г/{__/{_`@@+@@@+@@@+/{_`@@@+/{__,@@@@ 0+@@#/|` `%@@@Ш@г$list/|` `=/|` `A@г5extension_constructor/|` `'/|` `<@@+ְ@@@+װ @@@@ 5+@@#/}`C`V@@@Ш@г/}`C`X/}`C`d@@+@@@@ 8+@@#/~`f`u@@@Ш@г(Location0~`f`w0~`f`@0~`f`0~`f`@@@,@@@@ ;,@@#0``@@@Ш@г *attributes0``0``@@,@@@@ >,@ɠ.0-@@@@@@@A@*8.08*6*5@*5*5@@@*5@*5@+*3*307a7a;08a7aP@@;@@)pext_namer@@.#loc0@@@ C@@@ E0JaYa^0KaYat@@0c@)pext_kinds@@*4@@@ H0Vauaz0Waua@@0o@(pext_loct@@.!t@@@ K0daa0eaa@@0}@/pext_attributesu@@,@@@ N0paa0qaa@.c< [C of ... [\@id1] [\@id2]] 0~aa0ab@@@@@@@0@@@A@@@@@*{@@@*x@#GG<0aYag@;@@Ш@гJK0aYap0aYas@гM&string0aYai0aYao@@U,@@@[, @@^@@ F,@T@#PPK0aua@J@@Ш@гS:extension_constructor_kind0aua0aua@@[,@@^@@ I,@Z@#VVO0aa@N@@Ш@гY(Location0aa0aa@`0aa0aa@@@h,@@k@@ L,@e@#aa\0aa@M@@Ш@гd*attributes0aa0aa@@l,а@@o@@ O,@k.0ꐠih@hh@@@h@h@@A@*@+*ݠ*ݰ0bb 0bb@@;@@2ptyexn_constructorv@@*@@@ T0b b$0b bO@@1@*ptyexn_locw@@/T!t@@@ W1bPbT1bPbl@@1@1ptyexn_attributesx@@,@@@ Z1bmbq1bmb@/; [... [\@\@id1] [\@\@id2]] 1bmb1bmb@@@@@@@17@@@A@@@@@++@@+@#5501&b b6@/@@Ш@г85extension_constructor1/b b910b bN@@@-*@@C@@ U--@?@#;;418bPb^@3@@Ш@г>(Location1CbPba1DbPbi@E1GbPbj1HbPbk@@@M-C@@P@@ X-F@J@#FFA1Qbmb@2@@Ш@гI*attributes1Zbmb1[bmb@@Q-U@@T@@ [-X@P/P1oNM@MM@@@M@M@@A@+\/[1z+Z+Y@+Y+Y@@@+Y@+Y@++W+W1ybb1zbc @@;@@)Pext_decly10#loc1]@@@ ]@@@ _@@@ a+@@@ b0-@@@ c@@@ e@@1cc1ccZ@/ F [Pext_decl(existentials, c_args, t_opt)] describes a new extension constructor. It can be: - [C of T1 * ... * Tn] when: {ul {- [existentials] is [[]],} {- [c_args] is [[T1; ...; Tn]],} {- [t_opt] is [None]}.} - [C: T0] when {ul {- [existentials] is [[]],} {- [c_args] is [[]],} {- [t_opt] is [Some T0].}} - [C: T1 * ... * Tn -> T0] when {ul {- [existentials] is [[]],} {- [c_args] is [[T1; ...; Tn]],} {- [t_opt] is [Some T0].}} - [C: 'a... . T1 * ... * Tn -> T0] when {ul {- [existentials] is [['a;...]],} {- [c_args] is [[T1; ... ; Tn]],} {- [t_opt] is [Some T0].}} 1c[ca1ff@@@@@@@1@+Pext_rebindz0@#loc&!!t@@@ f@@@ h@@1ff+@/ F [Pext_rebind(D)] re-export the constructor [D] with the new name [C] 1ff1fg@@@@@@@1@@@A@@@@@+@@@+@#ZZ1cc1cc@+@г\$list1cc+1cc/@гab1cc'1cc*@гd&string1cc 1cc&@@l-@@@r- @@@w-@@гi5constructor_arguments2cc22ccG@@q-@@гn&option2 ccTj@гr)core_type2ccJ2ccS@@z.@@@.u@@@@w0 2(ut@tt@@@t@t@#pp2'ff2(ff@T@гrs20ff, @гt)Longident2:ff2;ff@{2>ff2?ff@@@.:@@@.; ,@@@@~042S}|@||@@@|@|@@A@,*@+,(,(2Rgmgq2Sgmg{@@;@@)pcty_desc{@@,@@@ i2_gg2`gg@@2x@(pcty_loc|@@0!t@@@ l2mgg2ngg@@2@/pcty_attributes}@@. @@@ o2ygg2zgg@0l7 [... [\@id1] [\@id2]] 2gg2gg@@@@@@@2@@@A@@@@@,^,[@@,?@#5502gg@/@@Ш@г8/class_type_desc2gg2gg@@@.@@C@@ j.@?@#;;42gg@3@@Ш@г>(Location2gg2gg@E2gg2gg@@@M.@@P@@ m.@J@#FFA2gg@2@@Ш@гI*attributes2gg2gg@@Q.@@T@@ p.@P02ؐNM@MM@@@M@M@@A@,22㐠,,@,,@@@,@,22,,@,,@@@,@,@+,,2hh 2hh@@;@@+Pcty_constr~1~#loc'_!t@@@ r@@@ t2.@@@ u@@@ w@@3hh3hhP@1 ) - [c] - [['a1, ..., 'an] c] 3hQhW3hah@@@@@@@35@.Pcty_signature,@@@ x@@3*hh3+hh@12 [object ... end] 38hh39hh@@@@@@@3Q@*Pcty_arrow1)arg_label@@@ y.@@@ z-'@@@ {@@3Qhh3Rhh@1D l [Pcty_arrow(lbl, T, CT)] represents: - [T -> CT] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]}, - [~l:T -> CT] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]}, - [?l:T -> CT] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]}. 3_hi3`jfjq@@@@@@@3x@.Pcty_extension/@@@ |@@3mjrjt3njrj@1`' [%id] 3{jrj3|jrj@@@@@@@3@)Pcty_open+@@@ }-d@@@ ~@@3jj-=@14 [let open M in CT] 3jj3jj@@@@@@@3@@@A@@@@@-N@@@-K@#3hh!3hh,@@г3hh<3hh?@г)Longident3hh03hh9@3hh:3hh;@@@/@@@/ @@г$list3hhL@г)core_type3hhB3hhK@@/ʰ@@@/˰@@@@Ơ13㐠@@@@@@#3hh3hh@@г/class_signature3hh@@/@@@@Š13@@@@@@#3hh3hh@@г4hh4hh@@0@@гà)core_type4hh4hh@@0 @@гȠ*class_type4hh@@0@@@@̠2 4,@@@@@@#ŠŰ4+jrjv4,jrj@@гǠ)extension45jrj@@0/@@@@ˠ2(4G@@@@@@#Ġİ4Fjj4Gjj@@гƠ0open_description4Pjj4Qjj@@0K@@гˠ*class_type4Zjj. @@0T. @@@@Ϡ2M4l@@@@@@@A@.@+..4kjj4ljj@@;@@*pcsig_self@@/@@@ 4xkk 4ykk"@@4@,pcsig_fields@@4.@@@ @@@ 4k#k(4k#kL@@4@@@A@@@@@.4.1@@.#@#4kk@@@Ш@г!)core_type4kk4kk!@@)0@@,@@ 0@(@#$$4k#k4@@@Ш@г'$list4k#kG4k#kK@г,0class_type_field4k#k64k#kF@@40@@@90 @@<@@ 0@3@@A@.c24ː.a.`@.`.`@@@.`@.`@+.^.^4l4l84l4lH@@;@@)pctf_desc@@.c@@@ 4lQlV4lQlw@@4@(pctf_loc@@35!t@@@ 4lxl}4lxl@@4@/pctf_attributes@@0@@@ 4ll4ll@2䐠; [... [\@\@id1] [\@\@id2]] 4ll5ll@@@@@@@5@@@A@@@@@.@@@.@#5505lQl_@/@@Ш@г85class_type_field_desc5lQla5lQlv@@@1 @@C@@ 1@?@#;;45lxl@3@@Ш@г>(Location5$lxl5%lxl@E5(lxl5)lxl@@@M1$@@P@@ 1'@J@#FFA52ll@2@@Ш@гI*attributes5;ll5<ll@@Q16@@T@@ 19@P315PNM@MM@@@M@M@@A@.@+.۠.۰5Oll5Pll@@;@@,Pctf_inherit/4@@@ @@5^ll5_lm@3Q. [inherit CT] 5llm5mlm-@@@@@@@5@(Pctf_val@4#loc4%label@@@ @@@ @4 ,mutable_flag@@@ @4,virtual_flag@@@ @1@@@ @@ @@5m.m05m.ms@3, [val x: T] 5mtmz5mtm@@@@@@@5@+Pctf_method@4;#loc4@%label@@@ @@@ @4H,private_flag@@@ @4O,virtual_flag@@@ @1O@@@ @@ @@5mm5mm@3ǐ a [method x: T] Note: [T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}. 5mm5n7nA@@@@@@@5@/Pctf_constraint@1o@@@ @1u@@@ @@ @@5nBnD5nBnp@3퐠6 [constraint T1 = T2] 6nBnr6 nBn@@@@@@@6!@.Pctf_attribute2m@@@ @@6nn6nn@4 . [[\@\@\@id]] 6$nn6%nn@@@@@@@6=@.Pctf_extension1@@@ @@62nn/@4$* [[%%id]] 6?nn6@nn@@@@@@@6X@@@A@@@@@/@@@/@#6Gll6Hlm @@г*class_type6Qlm@@2K@@@@4D6c@@@@@@#6bm.m26cm.m:@@В@г6om.mE6pm.mH@г6wm.m?6xm.mD@@2r@@@2s @@@г6m.mK6m.mW@@2}@@@г6m.mZ6m.mf@@2@@@г)core_type6m.mi6m.mr@@2@@@%2$@@@@46@@@@@@#6mm6mm@@В@г6mm6mm@г6mm6mm@@2@@@2 @@@г6mm6mm@@ 2Ű@@@г6mm6mm@@2ϰ@@@г )core_type6mm6mm@@2ڰ@@@22۰$@@@@46󐠠 @  @@@ @ @#  6nBnF6nBnU@@В@г )core_type7nBnZ7nBnc@@2@@@г)core_type7 nBnf7 nBno@@3@@@#3@@@@57@@@@@@#7nn7nn@@г)attribute7(nn@@3"@@@@57:@@@@@@#79nn7:nn@@г)extension7Cnn0@@3=0@@@@567U@@@@@@@A@0@+0ؠ0ذ7Tnn7Uno@А!a@ 3W7_nn7`nn@@BA@; @A(pci_virt@@5,virtual_flag@@@ 7ooo7poo,@@7@*pci_params@@6@2@@@ @@6(variance@@@ @6+injectivity@@@ @@ @@ @@@ 7o-o27o-oj@@7@(pci_name@@6$#loc7s@@@ @@@ 7okop7oko@@7@(pci_expr@@VD@ 7oo7oo@@7 @'pci_loc@@6!t@@@ 7oo7oo@@7 @.pci_attributes@@3\@@@ 7oo7oo@5; [... [\@\@id1] [\@\@id2]] 7oo7oo@@@@@@@7 @@@A@Y@@@@@1\1Y@@1K@#{{u7oo@t@@Ш@г~7oo7oo+@@3@@@@ 3@@#_7o-o<@^@@Ш@г$list7o-oe7o-oi@В@г)core_type8 o-o?8 o-oH@@4@@@В@г8o-oL8o-oT@@4@@@г8#o-oW8$o-ob@@4@@@4@@@4 8(o-oc@@@4"8*o-o>,@@@@ 4&@@#81okox@@@Ш@г89oko8:oko@г&string8Bokoz8Coko@@4=@@@4> @@@@ 4A@@#8Loo@@@Ш@А!a4K8Soo8Too@@@@ 4P@@#8[oo@@@Ш@г(Location8foo8goo@8joo8koo@@@4f@@@@ 4i@@#8too@@@Ш@г*attributes8}oo8~oo@@4x@@@@ 4{@6s8@@@@@@@A@2 6~822@22@@@2@2@+228pp8pp@@;@@5JA2)2@@@ @@@ @@@@2 @@@2@@Aг +class_infos8pp2@г*class_type8pp8pp@@4@@@42@@2@+228pp8pq@@;@@5nA2M2@@@ @@@ @@@@2@@@2@@Aг +class_infos8pq2$@г*class_type8pq8pq@@4װ@@@4ذ2/@@21@+2/2/8q_qc8q_qm@@;@@(pcl_desc@@2&@@@ ư8qvq{8qvq@@9  @'pcl_loc@@7O!t@@@ ɰ8qq9qq@@9 @.pcl_attributes@@4@@@ ̰9 qq9 qq@67 [... [\@id1] [\@id2]] 9qq9qq@@@@@@@92@@@A@@@@@2e2b@@2T@#5509!qvq@/@@Ш@г8/class_expr_desc9*qvq9+qvq@@@5%@@C@@ 5(@?@#;;493qq@3@@Ш@г>(Location9>qq9?qq@E9Bqq9Cqq@@@M5>@@P@@ 5A@J@#FFA9Lqq@2@@Ш@гI*attributes9Uqq9Vqq@@Q5P@@T@@ 5S@P7K9jNM@MM@@@M@M@@A@29v9u22@22@@@2@2@+229tqq9uqr @@;@@*Pcl_constr8#loc-!t@@@ @@@ Ѡ95@@@ @@@ @@9r r9r r>@7= [c] and [['a1, ..., 'an] c] 9r?rE9r?rg@@@@@@@9@-Pcl_structure2@@@ @@9 rhrj9 rhr@72 [object ... end] 9 rhr9 rhr@@@@@@@9@'Pcl_fun8O)arg_label@@@ ֠944@@@ @@@ ٠4@@@ ڠ3-@@@ @@9 rr9 rr@7Ր  [Pcl_fun(lbl, exp0, P, CE)] represents: - [fun P -> CE] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]} and [exp0] is [None], - [fun ~l:P -> CE] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]} and [exp0] is [None], - [fun ?l:P -> CE] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [None], - [fun ?l:(P = E0) -> CE] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [Some E0]. 9 rr9uu@@@@@@@: @)Pcl_apply3I@@@ ܠ9@8)arg_label@@@ ݠ@5 @@@ @@ @@@ @@:uu:uu@8 [Pcl_apply(CE, [(l1,E1) ; ... ; (ln,En)])] represents [CE ~l1:E1 ... ~ln:En]. [li] can be empty (non labeled argument) or start with [?] (optional argument). Invariant: [n > 0] :!uu:" vv@@@@@@@::@'Pcl_let8(rec_flag@@@ 91@@@ @@@ 3@@@ @@:?!vv:@!vw@82 P [Pcl_let(rec, [(P1, E1); ... ; (Pn, En)], CE)] represents: - [let P1 = E1 and ... and Pn = EN in CE] when [rec] is {{!Asttypes.rec_flag.Nonrecursive}[Nonrecursive]}, - [let rec P1 = E1 and ... and Pn = EN in CE] when [rec] is {{!Asttypes.rec_flag.Recursive}[Recursive]}. :M"ww :N'xXxb@@@@@@@:f@.Pcl_constraint3@@@ 46@@@ @@:`(xcxe:a(xcx@8S- [(CE : CT)] :n(xcx:o(xcx@@@@@@@:@-Pcl_extension6)@@@ @@:|)xx:})xx@8o) [[%id]] :)xx:)xx@@@@@@@:@(Pcl_open2@@@ 3@@@ @@:*xx3@84 [let open M in CE] :*xy:*xy@@@@@@@:@@@A@@@@@3@@@3@#66:r r:r r@@г89:r r*:r r-@г;)Longident:r r:r r'@B:r r(:r r)@@@J6ư@@@P6ǰ @@гE$list:r r:A@гI)core_type:r r0:r r9@@Q6ٰ@@@V6ڰL@@@@N8:򐠠LK@KK@@@K@K@#GG: rhrl: rhry@2@гI/class_structure: rhr}J@@P6K@@@@M8; KJ@JJ@@@J@J@#FF;  rr;  rr@@гHI; rr; rr@@O7@@гK&option; rr;  rr@гP*expression;( rr;) rr@@X7#@@@]7$ @@гU'pattern;3 rr;4 rr@@]7.@@гZ*class_expr;= rr[@@a77\@@@@^90;O\[@[[@@@[@[@#WW;Nuu;Ouu@-@гY*class_expr;Xuu;Yuu@@a7S@@г^$list;buuO@В@гbc;muu;nuu@@i7h@@@гe*expression;xuu;yuu@@m7s@@@y7t@@@~7u;}uuj@@@@l9o;ji@ii@@@i@i@#ee;!vv;!vv@@@гgh;!vv;!vv@@n7@@гj$list;!vv;!vv@гo-value_binding;!vv;!vv@@w7@@@|7 @@гt*class_expr;!vvu@@{7v@@@@x9;Ɛvu@uu@@@u@u@#qq;(xcxg;(xcxu@W@гs*class_expr;(xcxy;(xcx@@{7ʰ@@гx*class_type;(xcxy@@7Ӱz@@@@|9;될zy@yy@@@y@y@#uu;)xx;)xx@`@гw)extension;)xxx@@~7y@@@@{9<yx@xx@@@x@x@#tt<*xx<*xx@[@гv0open_description<*xx<*xx@@~8 @@г{*class_expr<*xx5K@@85L@@@@: <+~}@}}@@@}@}@@A@5Y@+5W5W<*,yy"<+,yy1@@;@@*pcstr_self@@7O@@@ <7.y:y?<8.y:yS@@(Location<:zz<:zz@E<:zz<:zz@@@M8@@P@@ 8@J@#FFA<;zz@2@@Ш@гI*attributes<;zz<;zz@@Q8@@T@@ 8@P:=NM@MM@@@M@M@@A@6@+66=>zz=>z{@@;@@+Pcf_inherit;-override_flag@@@ 6n@@@ <;#loc<@@@ @@@@@@@@=3?{{=4?{{S@;& { [Pcf_inherit(flag, CE, s)] represents: - [inherit CE] when [flag] is {{!Asttypes.override_flag.Fresh}[Fresh]} and [s] is [None], - [inherit CE as x] when [flag] is {{!Asttypes.override_flag.Fresh}[Fresh]} and [s] is [Some x], - [inherit! CE] when [flag] is {{!Asttypes.override_flag.Override}[Override]} and [s] is [None], - [inherit! CE as x] when [flag] is {{!Asttypes.override_flag.Override}[Override]} and [s] is [Some x] =A@{T{Z=BM}}@@@@@@@=Z@'Pcf_val@;#loc;%label@@@@@@@;,mutable_flag@@@@6n@@@@@ @@=gN}}=hN}~@;Z  [Pcf_val(x,flag, kind)] represents: - [val x = E] when [flag] is {{!Asttypes.mutable_flag.Immutable}[Immutable]} and [kind] is {{!class_field_kind.Cfk_concrete}[Cfk_concrete(Fresh, E)]} - [val virtual x: T] when [flag] is {{!Asttypes.mutable_flag.Immutable}[Immutable]} and [kind] is {{!class_field_kind.Cfk_virtual}[Cfk_virtual(T)]} - [val mutable x = E] when [flag] is {{!Asttypes.mutable_flag.Mutable}[Mutable]} and [kind] is {{!class_field_kind.Cfk_concrete}[Cfk_concrete(Fresh, E)]} - [val mutable virtual x: T] when [flag] is {{!Asttypes.mutable_flag.Mutable}[Mutable]} and [kind] is {{!class_field_kind.Cfk_virtual}[Cfk_virtual(T)]} =uO~~=v\@@@@@@@=@*Pcf_method@< #loc<%label@@@ @@@ @<,private_flag@@@ @6@@@@@@@=]=]R@; - [method x = E] ([E] can be a {{!expression_desc.Pexp_poly}[Pexp_poly]}) - [method virtual x: T] ([T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}) =^SY=b37@@@@@@@=@.Pcf_constraint@96@@@@9<@@@@@@@=c8:=c8e@;6 [constraint T1 = T2] =c8g=c8@@@@@@@=@/Pcf_initializer8@@@@@=d=d@;А1 [initializer E] =d=d@@@@@@@> @-Pcf_attribute:P@@@@@=e=e@;쐠. [[\@\@\@id]] >e>e@@@@@@@> !@-Pcf_extension9@@@@@>f7!@<* [[%%id]] >"f>#f @@@@@@@>;"@@@A@@@@@72@@@7/@#>*?{{>+?{{!@@г>3?{{%>4?{{2@@:.@@г*class_expr>=?{{5>>?{{?@@!:8@@г&option>G?{{M@г"#>N?{{I>O?{{L@г%&string>W?{{B>X?{{H@@-:R@@@3:S @@@8:T(@@@@*l('@''@@@'@'@###>kN}}>lN}}@@В@г%&>xN}}>yN}}@г()>N}}>N}}@@/:{@@@5:| @@@г+,>N}}>N}~@@2:@@@г.0class_field_kind>N}~>N}~@@6:@@@O:@@@@4<>21@11@@@1@1@#-->]>]!@@В@г/0>],>]/@г23>]&>]+@@9:@@@?: @@@г56>]2>]>@@<:İ@@@г80class_field_kind>]A>]Q@@@:ϰ@@@Y:а@@@@><>萠<;@;;@@@;@;@#77>c8<>c8J@@В@г9)core_type>c8O>c8X@@A:@@@г>)core_type?c8[?c8d@@F:@@@Q:@@@@D<?BA@AA@@@A@A@#==?d?d@(@г?*expression?d@@@F;A@@@@C=?/A@@@@@@@@@@@#<<?.e?/e@'@г>)attribute?8e?@@E;2@@@@@B=+?J@?@??@@@?@?@#;;?If?Jf@'@г=)extension?Sf8_@@D;M8`@@@@A=F?e@?@??@@@?@?@@A@8m@+8k8k?dh"&?eh"6@@;@@+Cfk_virtual:@@@@@?si9;?ti9U@@?#@,Cfk_concrete>-override_flag@@@:@@@@@?jVX8@@?$@@@A@@@@@8@@@8@#""?i9=?i9H@@г$)core_type?i9L%@@+;&@@@@(@#$$?jVZ?jVf@@г&'?jVj?jVw@@-;@@г)*expression?jVz8@@0;8@@@@-@@A@8@+88?l?l@@;@@F!t@@@?t@E?t@Z@@@&@/pmty_attributes@@;@@@"@u[`@u[|@=7 [... [\@id1] [\@id2]] @u[~@u[@@@@@@@@)'@@@A@@@@@98@@8@#550@s,@/@@Ш@г80module_type_desc@!s.@"s>@@@<@@C@@<@?@#;;4@*t@M@3@@Ш@г>(Location@5t@O@6t@W@E@9t@X@:t@Y@@@M<5@@P@@ <8@J@#FFA@Cu[o@2@@Ш@гI*attributes@Lu[q@Mu[{@@QB@aNM@MM@@@M@M@@A@9J@m@l9H9G@9G9G@@@9G@9G@x@w9E9D@9D9D@@@9D@9D@+9B9B@vx@wx@@;@@*Pmty_ident?#loc4!t@@@%@@@'@@@y@y@> [Pmty_ident(S)] represents [S] @y@y@@@@@@@@(@.Pmty_signature9e@@@(@@@z@z!@>/ [sig ... end] @z#@z7@@@@@@@@)@,Pmty_functor9@@@)9@@@*@@@{8:@{8k@>; [functor(X : MT1) -> MT2] @|lr@|l@@@@@@@@*@)Pmty_with9@@@+@i8@@@,@@@.@@@}@}@>㐠/ [MT with ...] @}@}@@@@@@@A+@+Pmty_typeof8@@@/@@A ~A ~@>5 [module type of ME] A~A~@@@@@@@A3,@.Pmty_extension<@@@0@@A(A)7@?) [[%id]] A69A7G@@@@@@@AO-@*Pmty_alias?#loc5!t@@@1@@@3@@ALHJ:@?>. [(module M)] AYHkAZH~@@@@@@@Ar.@@@A@@@@@:&@@@:#@#AayAby@@г堐Ajy@г砡)LongidentAtyAuy@AxyAyy@@@=t@@@=u @@@@񠰠?nA@@@@@@#AzAz@@г점)signatureAz@@=@@@@𠰠?A@@@@@@#A{8<A{8H@@г렐1functor_parameterA{8LA{8]@@=@@г+module_typeA{8`@@=@@@@?A͐@@@@@@#A}A}@@г+module_typeA}A}@@=Ѱ@@г$listA}@г/with_constraintA}A}@@=@@@=@@@@?A@@@@@@#A~A~@@г+module_exprB~@@=@@@@?B@@@@@@#BB*@@г)extensionB .@@>@@@@@B2@@@@@@#B1HLB2HV@@гB:Hf;@г)LongidentBDHZBEHc@BHHdBIHe@@@>D@@@ >E ;@@@@@>B]@@@@@@@A@;"@+; ; B\B]@@;@@$Unit@@BfBg@@Y& [()] BtBu@@@@@@@B/@%NamedA#locABW@@@4@@@6@@@8;@@@9@@B;S@@ [Named(name, MT)] represents: - [(X : MT)] when [name] is [Some X], - [(_ : MT)] when [name] is [None] BB5f@@@@@@@B0@@@A@@@@@;d@@@;a@#CCBA@2@@@D@BBA@AA@@@A@A@#==BB@@г?@BB@гB&optionBB@гG&stringBB@@O>ΰ@@@T>ϰ @@@Z>а@@гL+module_typeB;@@S>ٰ;@@@@P@B񐠠ON@NN@@@N@N@@A@;@+;;BhlBhu@@;@@?ABw;@@@:@@@<@@@@;@@@;@@Aг $listCh;@г.signature_itemC hxC h@@?@@@?;@@;@+;;CC@@;@@)psig_desc@@;@@@=C!C"@@C:1@(psig_loc@@A!t@@@@C/C0@@CH2@@@A@@@@@;@@@;@#C7@@@Ш@г3signature_item_descC@CA@@&?;@@)@@>?>@%@#!!CI@@@Ш@г$(LocationCTCU@+CXCY@@@3?T@@6@@A?W@0@@A@< @+<<CbCc@@;@@*Psig_value=@@@C@@Cq  Cr ,@Ad E - [val x: T] - [external x: T = "s1" ... "sn"] C-3Cr}@@@@@@@C3@)Psig_typeB(rec_flag@@@DC=@@@E@@@G@@C~C~@A ' [type t1 = ... and ... and tn = ...] CC@@@@@@@C4@.Psig_typesubstC2>@@@H@@@J@@CC@A ) [type t1 := ... and ... and tn := ...] CCC@@@@@@@C5@+Psig_typext=@@@K@@CDFCDe@AȐ2 [type t1 += ...] CDgCD~@@@@@@@C6@.Psig_exception=@@@L@@CC@A䐠4 [exception C of T] CD@@@@@@@D7@+Psig_module<@@@M@@D D@B $ [module X = M] and [module X : MT] DD@@@@@@@D48@-Psig_modsubst<@@@N@@D)D*8@B1 [module X := M] D7:D8P@@@@@@@DP9@.Psig_recmoduleCà<@@@O@@@Q@@DJQSDKQ~@B= , [module rec X1 : MT1 and ... and Xn : MTn] DXDY@@@@@@@Dq:@,Psig_modtypeÐ<@@@R@@DfDg@BY * [module type S = MT] and [module type S] DtDu@@@@@@@D;@1Psig_modtypesubstĐ<@@@S@@DDI@Bu: [module type S := ...] DJPDJo@@@@@@@D<@)Psig_openŐ<@@@T@@DprDp@B* [open X] DpDp@@@@@@@D=@,Psig_includeƐ<@@@U@@DD@B. [include MT] DD@@@@@@@D>@*Psig_classǐDT>C@@@V@@@X@@DD@Bΐ ' [class c1 : ... and ... and cn : ...] D D ;@@@@@@@E?@/Psig_class_typeȐDu>U@@@Y@@@[@@D<>D<n@B . [class type ct1 = ... and ... and ctn = ...] E ouE o@@@@@@@E#@@.Psig_attributeɐAo@@@\@@EE@C . [[\@\@\@id]] E&E'@@@@@@@E?A@.Psig_extensionʐ@@@@]@@@@^@@E9=@C+* [[%%id]] EF EG@@@@@@@E_B@@@A@@@@@=@@@=@#EN  EO @@г栐1value_descriptionEX @@AR@@@@꠰CKEj@@@@@@#Ei~Ej~@@г堐Er~Es~@@Am@@г蠐$listE|~@г점0type_declarationE~E~@@A@@@A@@@@񠰠CyE@@@@@@#EE@@г점$listE @г0type_declarationEE @@A@@@A@@@@CE@@@@@@#EDHEDS@@г.type_extensionEDW@@A@@@@CEؐ@@@@@@#EE@@г.type_exceptionE@@A۰@@@@󠰠CE󐠠@@@@@@#EE@@г2module_declarationE@@A@@@@򠰠CF@@@@@@#F F!@@г3module_substitutionF%@@B@@@@񠰠D F)@@@@@@#F(QUF)Qc@@г점$listF2Qz@г2module_declarationF:QgF;Qy@@B5@@@B6@@@@D/FN@@@@@@#FMFN@@г7module_type_declarationFW@@BQ@@@@DJFi@@@@@@#FhFi.@@г7module_type_declarationFr2@@Bl@@@@󠰠DeF@@@@@@#FptFp}@@г0open_descriptionFp@@B@@@@򠰠DF@@@@@@#FF@@г3include_descriptionF@@B@@@@񠰠DF@@@@@@#FF@@г점$listF@г1class_descriptionFF@@Bư@@@Bǰ@@@@DFߐ@@@@@@#F<@F<O@@г$listF<j@г6class_type_declarationF<SF<i@@B@@@B@@@@DG@@@@@@#GG@@г)attributeG @@C@@@@EG@@@@@@#GG@@г)extensionG(G)@@C#@@г*attributesG2?@@C,?@@@@E%GD@@@@@@@A@?@+??GC!GD3@@;@@(pmd_name@@E#locFG%@@@_@@@a@@@cG[<AG\<]@@GtC@(pmd_type@@@W@@@fGg^cGh^y@@GD@.pmd_attributes@@C@@@iGszGtz@Ef; [... [\@\@id1] [\@\@id2]] GzGz@@@@@@@GE@'pmd_loc@@E!t@@@lGG@@GF@@@A@@@@@@-@*@@@@#LL<G<I@;@@Ш@гOPG<YG<\@гR&optionG<RG<X@гW&stringG<KG<Q@@_C@@@dC @@@jC@@m@@dC@^@#ZZUG^k@T@@Ш@г]+module_typeG^mG^x@@eC@@h@@gC@d@#``[Gz@L@@Ш@гc*attributesGzGz@@kCҰ@@n@@jC@jEG쐠hg@gg@@@g@g@#cc\G@[@@Ш@гf(LocationGG@mGG@@@uC@@x@@mC@r@@A@@EH@@@@@@@@@@@@+@@H!H4@@;@@(pms_name@@F#locG@@@r@@@tH"=BH#=W@@H;G@,pms_manifest@@F#loc!t@@@@@@@@@@@@@BB@@B@@Aг*open_infosJjB@гJqJr@г)LongidentJ|J}@ JJ@@@(F|@@@.F} @@@3F~ B@@BHwJBB@BB@@@B@B@+BBJDHJDX@@;@@GCABBY@@@@@@@@@@BB@@B@@Aг *open_infosJDgB@г+module_exprJD[JDf@@F@@@FB@@BϠHJŐBB@BB@@@B@B@+BʠBʰJJ@А!a@FǰJJ@@p@;@A)pincl_mod@@D@J J@@JS@)pincl_loc@@I9!t@@@JJ5@@KT@0pincl_attributes@@F@@@J6;J6X@@KU@@@A@Y@@@@@B@@@B@#''$J@#@@Ш@А!a-FKK@@2@@G@0@#,,%K(@$@@Ш@г/(LocationK*K2@6K3K4@@@>G@@A@@G@;@#772K'6K@1@@Ш@г:*attributesK06MK16W@@BG+@@E@@G.@A@@A@C4@+C2C2K9`dK:`w@@;@@GACHD6@@@@@@@@@@C6C3@@C%@@Aг -include_infosKM`C<@г+module_typeKU`zKV`@@GP@@@GQCG@@CIIJKiCGCF@CFCF@@@CF@CF@+CDCDKhKi@@;@@HACwC,@@@@@@@@@@CHCE@@C7@@Aг -include_infosK|CN@г+module_exprKK@@G@@@GCY@@C[IyKCYCX@CXCX@@@CX@CX@+CVCVKRVKRe@@;@@*Pwith_typeސJ(#loc@ !t@@@@@@F@@@@@KhjKh@I [with type X.t = ...] Note: the last component of the longident must match the name of the type_declaration. KK/@@@@@@@KV@,Pwith_moduleߐJQ#loc@2!t@@@@@@ŠJ^#loc@?!t@@@@@@@@K02K0e@Iא7 [with module X.Y = Z] KflKf@@@@@@@L W@-Pwith_modtypeJ#loc@c!t@@@@@@ˠD@@@@@L L@J< [with module type X.Y = Z] LL@@@@@@@L4X@2Pwith_modtypesubstᐠJ#loc@!t@@@@@@ϠE&@@@@@L6L7@J) # [with module type X.Y := sig end] LD"LEJ@@@@@@@L]Y@/Pwith_typesubst␠J#loc@!t@@@@@@ӠF@@@@@L_KML`K@JR 5 [with type X.t := ..., same format as [Pwith_type]] LmLn@@@@@@@LZ@.Pwith_modsubst㐠J#loc@!t@@@@@@נK #loc@!t@@@@@@@@LDL@J8 [with module X.Y := Z] LL!@@@@@@@L[@@@A@@@@@D]@@@DZ@#LhlLhv@@г LhLh@г )LongidentLhzLh@LhLh@@@H@@@ H @@г0type_declarationLh@@Hð@@@@JLې@@@@@@#L04L0@@@гL0PL0S@г)LongidentL0DL0M@L0NL0O@@@&H@@@,H @@г!"L0b@г#)LongidentM0VM0_@*M 0`M 0a@@@2I@@@8I +@@@@-KM +*@**@@@*@*@#&&MM @@г()M(M)@г+)LongidentM3M4@2M7M8@@@:I3@@@@I4 @@г5+module_typeMC6@@<I=7@@@@9K6MU76@66@@@6@6@#22MTMU@@г45M] M^ @г7)LongidentMhMi@>MlMm @@@FIh@@@LIi @@гA+module_typeMxB@@HIrC@@@@EKkMCB@BB@@@B@B@#>>MKOMK^@@г@AMKnMKq@гC)LongidentMKbMKk@JMKlMKm@@@RI@@@XI @@гM0type_declarationMKtN@@TIO@@@@QKMON@NN@@@N@N@#JJMM@!@гLMMM@гO)LongidentMM@VMM@@@^IҰ@@@dIӰ @@гYZME@г[)LongidentMM@bMM@@@jI@@@pI E@@@@eKNdc@cc@@@c@c@@A@E@+EENY]NYh@@;@@)pmod_desc@@E@@@۰NqvNq@@N)\@(pmod_loc@@Ln!t@@@ްN N @@N7]@/pmod_attributes@@I@@@N* N+ @L7 [... [\@id1] [\@id2]] N8 N9 @@@@@@@NQ^@@@A@@@@@EE@@E@#550N@q@/@@Ш@г80module_expr_descNIqNJq@@@JD@@C@@JG@?@#;;4NR @3@@Ш@г>(LocationN] N^ @ENa Nb @@@MJ]@@P@@J`@J@#FFANk @2@@Ш@гI*attributesNt Nu @@QJo@@T@@Jr@PLjNNM@MM@@@M@M@@A@F9NNF7F6@F6F6@@@F6@F6@+F4F4N N  @@;@@*Pmod_ident琠M$#locC!t@@@@@@@@N N -@L% [X] N /N 9@@@@@@@N_@.Pmod_structure萠F_@@@@@N:<N:Y@L2 [struct ... end] N:[N:r@@@@@@@N`@,Pmod_functor鐠G@@@F@@@@@NsuNs@Lڐ: [functor(X : MT1) -> ME] NN@@@@@@@Oa@*Pmod_applyꐠF@@@F@@@@@OO @L, [ME1(ME2)] OO @@@@@@@O/b@/Pmod_apply_unit될F@@@@@O$  O% -@M) [ME1()] O2 .O3 <@@@@@@@OKc@/Pmod_constraint쐠F@@@H5@@@@@OE=?OF=m@M8- [(ME : MT)] OS=oOT=@@@@@@@Old@+Pmod_unpack퐠J[@@@@@OaOb@MT+ [(val E)] OoOp@@@@@@@Oe@.Pmod_extensionK*@@@@@O}G@Mo) [[%id]] OO@@@@@@@Of@@@A@@@@@G,@@@G)@#O O @@гO *@г)LongidentO O '@O (O )@@@ K@@@K @@@@MO@@@@@@#O:>O:L@@г)structureO:P@@K@@@@MOِ@@@@@@#OswOs@@г1functor_parameterOsOs@@Kݰ@@г+module_exprOs@@ K@@@@MO@@@@@@#OO@@г+module_exprPP@@ L@@г+module_exprP @@L  @@@@ NP#  @  @@@ @ @#P" P# @@г+module_exprP, "@@L& @@@@ NP> @@@@@@#P==AP>=P@@г+module_exprPG=TPH=_@@LB@@г +module_typePQ=b @@LK @@@@NDPc  @  @@@ @ @#PbPc@@г *expressionPl @@Lf @@@@N_P~  @  @@@ @ @#P}P~@@г )extensionPH%@@LH&@@@@ NzP  @  @@@ @ @@A@H3@+H1H1PP@@;@@MFAPH/@@@@@@@@@@H5@@@H2@@Aг $listPH;@г.structure_itemPP@@L@@@LHF@@HH@+HFHFP P@@;@@)pstr_desc@@HK@@@P#(P#G@@Pg@(pstr_loc@@O'!t@@@PHMPHb@@Ph@@@A@@@@@Hb@@@H_@#P#1@@@Ш@г3structure_item_descP#3P#F@@&L@@)@@L@%@#!!PHU@@@Ш@г$(LocationPHWPH_@+QH`QHa@@@3L@@6@@L@0@@A@H@+HHQ  jnQ  j@@;@@)Pstr_evalL@@@L@@@@@Q!Q!@O% [E] Q,!Q-!@@@@@@@QEi@*Pstr_valueO(rec_flag@@@PH@@@@@@@@QE"QF"@O8 E [Pstr_value(rec, [(P1, E1 ; ... ; (Pn, En))])] represents: - [let P1 = E1 and ... and Pn = EN] when [rec] is {{!Asttypes.rec_flag.Nonrecursive}[Nonrecursive]}, - [let rec P1 = E1 and ... and Pn = EN ] when [rec] is {{!Asttypes.rec_flag.Recursive}[Recursive]}. QS#QT(/9@@@@@@@Qlj@.Pstr_primitiveK@@@@@Qa):<Qb):a@OT < - [val x: T] - [external x: T = "s1" ... "sn" ]Qo*bhQp+y@@@@@@@Qk@)Pstr_typeO(rec_flag@@@QK@@@@@@@@Q,Q,@O{ & [type t1 = ... and ... and tn = ...] Q-Q- @@@@@@@Ql@+Pstr_typextK@@@@@Q.Q./@O2 [type t1 += ...] Q.1Q.H@@@@@@@Qm@.Pstr_exceptionK@@@@@Q/IKQ/Im@O 8 - [exception C of T] - [exception C = M.X] Q0ntQ1@@@@@@@Qn@+Pstr_moduleI9@@@@@Q2Q2@Oϐ1 [module X = ME] Q2Q2@@@@@@@Ro@.Pstr_recmoduleQvIY@@@@@@ @@Q3Q3@O𐠠 , [module rec X1 = ME1 and ... and Xn = MEn] R 4R 4M@@@@@@@R$p@,Pstr_modtypeJ@@@ @@R5NPR5Ny@P 6 [module type S = MT] R'5N{R(5N@@@@@@@R@q@)Pstr_openJX@@@ @@R56R66@P(* [open X] RC6RD6@@@@@@@R\r@*Pstr_classQϠKT@@@ @@@@@RV7RW7@PI ' [class c1 = ... and ... and cn = ...] Rd8Re8%@@@@@@@R}s@/Pstr_class_typeQK@@@@@@@@Rw9&(Rx9&X@Pj . [class type ct1 = ... and ... and ctn = ...] R:Y_R:Y@@@@@@@Rt@,Pstr_includeJo@@@@@R;R;@P. [include ME] R;R;@@@@@@@Ru@.Pstr_attributeO@@@@@R<R<@P. [[\@\@\@id]] R<R<@@@@@@@Rv@.Pstr_extensionNx@@@N`@@@@@R=JO@P* [[%%id]] R=3R=B@@@@@@@Rw@@@A@@@@@J`@@@J]@#ӠӰR!R!@@гՠ*expressionR!R!@@N@@гڠ*attributesR!@@N@@@@ޠPS @@@@@@#נװS "S "@@г٠ڰS"S"@@O@@гܠ$listS"@гࠐ-value_bindingS%"S&"@@O @@@O!@@@@堰QS9@@@@@@#ޠްS8):>S9):L@@гࠐ1value_descriptionSB):P@@O<@@@@䠰Q5ST@@@@@@#ݠݰSS,ST,@@гߠS\,S],@@OW@@г⠐$listSf,@г栐0type_declarationSn,So,@@Oi@@@Oj@@@@렰QcS@@@@@@#S.S.@@г栐.type_extensionS.!@@O@@@@꠰Q~S@@@@@@#S/IMS/I[@@г堐.type_exceptionS/I_@@O@@@@頰QS@@@@@@#S2S2@@г䠐.module_bindingS2@@O@@@@蠰QSӐ@@@@@@#S3S3@@г㠐$listS3@г砐.module_bindingS3S3@@O߰@@@O@@@@젰QS@@@@@@#S5NRS5N^@@г砐7module_type_declarationT5Nb@@O@@@@렰QT@@@@@@#T6T6@@г栐0open_declarationT6@@P@@@@꠰RT.@@@@@@#T-7T.7@@г堐$listT77@г預1class_declarationT?7T@7@@P:@@@P;@@@@R4TS@@@@@@#TR9&*TS9&9@@г預$listT\9&T@г6class_type_declarationTd9&=Te9&S@@P_@@@P`@@@@򠰠RYTx@@@@@@#Tw;Tx;@@г3include_declarationT;@@P{@@@@񠰠RtT@@@@@@#T<T<@@г점)attributeT<@@P@@@@𠰠RT@@@@@@#T= T=@@г렐)extensionT=T=$@@P@@г*attributesT='L@@@PLA@@@@RTӐ@@@@@@@A@LN@+LLLLT?DHT?DX@@;@@.Pvc_constraint8locally_abstract_univars@@TbSj#locT@@@@@@@@@TAsyTAs@@Ux@#typ@@Pv@@@TBTB@@Uy@@@T@[]UC@@Uz@,Pvc_coercion&ground@@TqP@@@!@@@#UDUD@@U.{@(coercion@@P@@@&U!DU"D@@U:|@@@U%DL@S  - [Pvc_constraint { locally_abstract_univars=[]; typ}] is a simple type constraint on a value binding: [ let x : typ] - More generally, in [Pvc_constraint { locally_abstract_univars; typ}] [locally_abstract_univars] is the list of locally abstract type variables in [ let x: type a ... . typ ] - [Pvc_coercion { ground=None; coercion }] represents [let x :> typ] - [Pvc_coercion { ground=Some g; coercion }] represents [let x : g :> typ] U2EU3M@@@@@@@UK}@@@A@@@@@L@@@L@#``U:@[_U;@[m@;@#bbRUAAs@Q@@Ш@гe$listUJAsUKAs@гjkURAsUSAs@гm&stringU[AsU\As@@uQV@@@{QW @@@QX@@@@Q[@t@#ppkUfB@j@@Ш@гs)core_typeUoBUpB@@{Qj@@~@@Qm@z@@@v@#rrUxDUyD@F@#ttjUD@i@@Ш@гw&optionUDUD@г|)core_typeUDUD@@Q@@@Q @@@@$Q@@#zUD@y@@Ш@г)core_typeUD@@Q@@@@'Q@@@@SU@@@@@@@A@M+@+M)M)UOUO@@;@@'pvb_pat@@P@@@)UQ UQ@@U~@(pvb_expr@@P@@@,UR UR5@@U@.pvb_constraint@@U=MZ@@@/@@@1US6:US6b@@U@.pvb_attributes @@Q}@@@4UTcgUTc@@V@'pvb_loc @@TK!t@@@7UUUU@@V@@@A@@@@@MnMk@@M^@#DD?VQ@>@@Ш@гG'patternV QV Q@@OR@@R@@*R @N@#JJEVR(@D@@Ш@гM*expressionVR*VR4@@UR@@X@@-R@T@#PPFV'S6H@E@@Ш@гS&optionV0S6[V1S6a@гX0value_constraintV9S6JV:S6Z@@`R4@@@eR5 @@h@@2R8@_@#[[VVCTcu@U@@Ш@г^*attributesVLTcwVMTc@@fRG@@i@@5RJ@e@#aaZVUU@Y@@Ш@гd(LocationV`UVaU@kVdUVeU@@@sR`@@v@@8Rc@p@@A@MڠT[VzMM@MM@@@M@M@+M֠MְVyXVzX@@;@@(pmb_name @@U#locUV[@@@:@@@<@@@>VZVZ@@V@(pmb_expr @@NT@@@AV[ V[!@@V@.pmb_attributes @@R9@@@DV\"'V\"B@@V@'pmb_loc@@U!t@@@GV]CHV]C\@@V@@@A@@@@@NN@@N@#>>.VZ@-@@Ш@гABVZVZ@гD&optionVZVZ@гI&stringVZVZ@@QR԰@@@VRհ @@@\Rְ@@_@@?R@P@#LLGV[@F@@Ш@гO+module_exprV[V[ @@WR@@Z@@BR@V@#RRMV\"5@L@@Ш@гU*attributesV\"7W\"A@@]R@@`@@ER@\@#XXQW]CO@P@@Ш@г[(LocationW]CQW]CY@bW]CZW]C[@@@jS@@m@@HS@g@@A@NxUW-NvNu@NuNu@@@Nu@Nu@@SSKN@W<W;. {1 Toplevel} W8aW9a@@@@@@3W7W6W6W7W7W7W7W7@SNNNOvOOO%O; }OC O` O} GO O O 2O OP qP!=P)P1lP@PH$PP PtPPPrPPVP PPPQ Q"1Q"Q.#Q6$QZ%.Qb&Qx&Q'IQ(Q)Q*5Q+Q+Q.R .R/sR*0R20_R:1RB1RJ2R`2Rh=R~>RDRE=RERF RFRG)RHRL|RM5SNSNBS1NSS@AKWW6 {2 Toplevel phrases} WcWc@@@@@@YA+/toplevel_phraseDWeWe@@;@@(Ptop_defOD@@@)@@WfWf@@W@(Ptop_dir2toplevel_directiveD@@@*@@Wg  Wg +@U5 [#use], [#load] ... Wg -Wg G@@@@@@@W@@@A@@@@@We@@@@W@@#00WfWf@)@г2)structureWf3@@93WWWWWWWW@L;@@@A@@@@@@@@/;@@@A@@@@@WiIIWn@@@@X@2directive_argumentD;@@@A@@@@@WpWt*-@@@@X @7directive_argument_descD;@@@A@@@@@Wv//Wz@@@@X@@AQ@@@@S@#OOXg  Xg @8@гQ2toplevel_directiveX g P@@X-Q@@@@SUXQP@PP@@@P@P@@A@L@+ccXiIMXiI_@@;@@)pdir_name@@V#locW@@@+@@@-X/kfjX0kf@@XH@(pdir_arg@@WQ@@@0@@@2X@lXAl@@XY@(pdir_loc@@V!t@@@5XNmXOm@@Xg@@@A@@@@@i@@@f@#22'XVkfs@&@@Ш@г56X^kf|X_kf@г8&stringXgkfuXhkf{@@@@@@F @@I@@.@?@#;;1Xql@0@@Ш@г>&optionXzlX{l@гC2directive_argumentXlXl@@K@@@P @@S@@3@J@#FF?Xm@>@@Ш@гI(LocationXmXm@PXmXm@@@X@@[@@6@U@@A@@+XpXp@@;@@*pdira_desc@@@@@;XrXr@@X@)pdira_loc@@W!t@@@>XsXs)@@X@@@A@@@@@@@@@#Xr@@@Ш@г7directive_argument_descXrXr @@&@@)@@<@%@#!!Xs@@@Ш@г$(LocationXsXs&@+Xs'Xs(@@@3@@6@@?@0@@A@@+Xv/3Xv/J@@;@@+Pdir_stringX@@@A@@YwMOYwMf@@Y@(Pdir_intX@@@BXwX@@@C@@@E@@YxgiYxg@@Y4@*Pdir_identM!t@@@F@@Y+yY,y@@YD@)Pdir_boolX@@@G@@Y9z@@@YQ@@@A@@@@@C@@@@@#DDY@wMQYAwM\@=@гF&stringYJwM`G@@MlH@@@@J@#FFYPxgkYQxgs@5@гH&stringYZxgwY[xg}@@P}@@гM&optionYdxgI@гQ$charYlxgYmxg@@Y@@@^T@@@@V@#RRYtyYuy@I@гT)LongidentYyYy@[YyY@Z@@b[@@@@]@#YYYzYz@S@г[$boolYz@@b@@@@_@@A@@@]@@X XA@WWB@VPVJA@UUA@UQPB@U6PdB@UPBB@U%O[B@UNB@TJBB@TIUB@THB@TH;B@TGB@TGqB@TFB@T@B@T@"B@T4B@T4ZB@T3B@T|3SB@Tv2B@Tp2WB@T\1B@TV1BB@T40OB@T.B@T -`B@S,B@S+nB@S*B@S)B@S(B@S(cB@S'B@S&B@S%wB@S|%B@Sv$B@Sp"B@SW!NB@SJ!,B@S=! B@S) |B@S#B@SkB@S B@SB@RCB@R!B@RB@RB@RB@RB@RB@RB@RB@R(B@RmSB@RTB@R9}B@REB@RB@QB@QB@Q B@Q B@Q B@Q fB@Q B@QTB@QqB@QB@A@yB@FB@@>B@@3Z1Z0Z0Z1Z1Z1Z1Z1@ECM@A@ H************************************************************************Z=A@@Z>A@L@ H ZCBMMZDBM@ H OCaml ZICZJC@ H ZODZPD3@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt ZUE44ZVE4@ H Z[FZ\F@ H Copyright 1996 Institut National de Recherche en Informatique et ZaGZbG@ H en Automatique. ZgHZhHg@ H ZmIhhZnIh@ H All rights reserved. This file is distributed under the terms of ZsJZtJ@ H the GNU Lesser General Public License version 2.1, with the ZyKZzKN@ H special exception on linking described in the file LICENSE. ZLOOZLO@ H ZMZM@ H************************************************************************ZNZN5@ * Abstract syntax tree produced by parsing {b Warning:} this module is unstable and part of {{!Compiler_libs}compiler-libs}. Z * Integer constants such as [3] [3l] [3L] [3n]. Suffixes [[g-z][G-Z]] are accepted by the parser. Suffixes except ['l'], ['L'] and ['n'] are rejected by the typechecker Xw;* Character such as ['c']. X^ * Constant string such as ["constant"] or [{delim|other constant|delim}]. The location span the content of the string, without the delimiters. X4 * Float constant such as [3.4], [2e5] or [1.4e-4]. Suffixes [g-z][G-Z] are accepted by the parser. Suffixes are rejected by the typechecker. X7* {1 Extension points} W * Attributes such as [[\@id ARG]] and [[\@\@id ARG]]. Metadata containers passed around within the AST. The compiler ignores unknown attributes. V * Extension points such as [[%id ARG] and [%%id ARG]]. Sub-language placeholder -- rejected by the typechecker. V; 0* [: SIG] in an attribute or an extension point Q .* [: T] in an attribute or an extension point Q A* [? P] or [? P when E], in an attribute or an extension point Pᠠ4* {1 Core language} V7* {2 Type expressions} V8* [... [\@id1] [\@id2]] P,&* [_] O?* A type variable such as ['a] O * [Ptyp_arrow(lbl, T1, T2)] represents: - [T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]}, - [~l:T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled]}, - [?l:T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional]}. Ob j* [Ptyp_tuple(tl)] represents a product type: - [T1 * ... * Tn] when [tl] is [(None, T1); ...; (None, Tn)] - [L1:T1 * ... * Ln:Tn] when [tl] is [(Some L1, T1); ...; (Some Ln, Tn)] - A mix, e.g., [L1:T1 * T2] when [tl] is [(Some L1, T1); (None, T2)] Invariant: [n >= 2]. O5 * [Ptyp_constr(lident, l)] represents: - [tconstr] when [l=[]], - [T tconstr] when [l=[T]], - [(T1, ..., Tn) tconstr] when [l=[T1 ; ... ; Tn]]. O V* [Ptyp_object([ l1:T1; ...; ln:Tn ], flag)] represents: - [< l1:T1; ...; ln:Tn >] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, - [< l1:T1; ...; ln:Tn; .. >] when [flag] is {{!Asttypes.closed_flag.Open}[Open]}. N䠠 * [Ptyp_class(tconstr, l)] represents: - [#tconstr] when [l=[]], - [T #tconstr] when [l=[T]], - [(T1, ..., Tn) #tconstr] when [l=[T1 ; ... ; Tn]]. N-* [T as 'a]. N * [Ptyp_variant([`A;`B], flag, labels)] represents: - [[ `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, and [labels] is [None], - [[> `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Open}[Open]}, and [labels] is [None], - [[< `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, and [labels] is [Some []], - [[< `A|`B > `X `Y ]] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, and [labels] is [Some ["X";"Y"]]. Na * ['a1 ... 'an. T] Can only appear in the following context: - As the {!core_type} of a {{!pattern_desc.Ppat_constraint}[Ppat_constraint]} node corresponding to a constraint on a let-binding: {[let x : 'a1 ... 'an. T = e ...]} - Under {{!class_field_kind.Cfk_virtual}[Cfk_virtual]} for methods (not values). - As the {!core_type} of a {{!class_type_field_desc.Pctf_method}[Pctf_method]} node. - As the {!core_type} of a {{!expression_desc.Pexp_poly}[Pexp_poly]} node. - As the {{!label_declaration.pld_type}[pld_type]} field of a {!label_declaration}. - As a {!core_type} of a {{!core_type_desc.Ptyp_object}[Ptyp_object]} node. - As the {{!value_description.pval_type}[pval_type]} field of a {!value_description}. N80* [(module S)]. N** [M.(T)] M+* [[%id]]. Mᠠ * As {!package_type} typed values: - [{ppt_path: S; ppt_cstrs: []}] represents [(module S)], - [{ppt_path: S; ppt_cstrs: [(t1, T1) ; ... ; (tn, Tn)]}] represents [(module S with type t1 = T1 and ... and tn = Tn)]. V 2* [Rtag(`A, b, l)] represents: - [`A] when [b] is [true] and [l] is [[]], - [`A of T] when [b] is [false] and [l] is [[T]], - [`A of T1 & .. & Tn] when [b] is [false] and [l] is [[T1;...Tn]], - [`A of & T1 & .. & Tn] when [b] is [true] and [l] is [[T1;...Tn]]. - The [bool] field is true if the tag contains a constant (empty) constructor. - [&] occurs when several types are used for the same constructor (see 4.2 in the manual) I,* [[ | t ]] Iנ/* {2 Patterns} U8* [... [\@id1] [\@id2]] Hj3* The pattern [_]. G蠠 !* A variable pattern such as [x] Gɠ %* An alias pattern such as [P as 'a] G A* Patterns such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n] G * Patterns such as ['a'..'z']. Other forms of interval are recognized by the parser but rejected by the type-checker. Gn * [Ppat_tuple(pl, Closed)] represents - [(P1, ..., Pn)] when [pl] is [(None, P1); ...; (None, Pn)] - [(~L1:P1, ..., ~Ln:Pn)] when [pl] is [(Some L1, P1); ...; (Some Ln, Pn)] - A mix, e.g. [(~L1:P1, P2)] when [pl] is [(Some L1, P1); (None, P2)] [Ppat_tuple(pl, Open)] is similar, but indicates the pattern additionally ends in a [..]. Invariant: - If Closed, [n >= 2]. - If Open, [n >= 1]. G: h* [Ppat_construct(C, args)] represents: - [C] when [args] is [None], - [C P] when [args] is [Some ([], P)] - [C (P1, ..., Pn)] when [args] is [Some ([], Ppat_tuple [P1; ...; Pn])] - [C (type a b) P] when [args] is [Some ([a; b], P)] F * [Ppat_variant(`A, pat)] represents: - [`A] when [pat] is [None], - [`A P] when [pat] is [Some P] F֠ C* [Ppat_record([(l1, P1) ; ... ; (ln, Pn)], flag)] represents: - [{ l1=P1; ...; ln=Pn }] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]} - [{ l1=P1; ...; ln=Pn; _}] when [flag] is {{!Asttypes.closed_flag.Open}[Open]} Invariant: [n > 0] F>* Pattern [[| P1; ...; Pn |]] F4* Pattern [P1 | P2] Fd4* Pattern [(P : T)] FF4* Pattern [#tconst] F%3* Pattern [lazy P] F * [Ppat_unpack(s)] represents: - [(module P)] when [s] is [Some "P"] - [(module _)] when [s] is [None] Note: [(module P : S)] is represented as [Ppat_constraint(Ppat_unpack(Some "P"), Ptyp_package S)] E蠠8* Pattern [exception P] EϠ6 Pattern [effect P P] [!,--9[",--S@2* Pattern [[%id]] E2* Pattern [M.(P)] E8* {2 Value expressions} V8* [... [\@id1] [\@id2]] B -* Identifiers such as [x] and [M.x] Av Y* Expressions constant such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n] A] P* [Pexp_let(flag, [(P1,E1) ; ... ; (Pn,En)], E)] represents: - [let P1 = E1 and ... and Pn = EN in E] when [flag] is {{!Asttypes.rec_flag.Nonrecursive}[Nonrecursive]}, - [let rec P1 = E1 and ... and Pn = EN in E] when [flag] is {{!Asttypes.rec_flag.Recursive}[Recursive]}. A4 * [Pexp_function ([P1; ...; Pn], C, body)] represents any construct involving [fun] or [function], including: - [fun P1 ... Pn -> E] when [body = Pfunction_body E] - [fun P1 ... Pn -> function p1 -> e1 | ... | pm -> em] when [body = Pfunction_cases [ p1 -> e1; ...; pm -> em ]] [C] represents a type constraint or coercion placed immediately before the arrow, e.g. [fun P1 ... Pn : ty -> ...] when [C = Some (Pconstraint ty)]. A function must have parameters: in [Pexp_function (params, _, body)], if [params] does not contain a [Pparam_val _], [body] must be [Pfunction_cases _]. A * [Pexp_apply(E0, [(l1, E1) ; ... ; (ln, En)])] represents [E0 ~l1:E1 ... ~ln:En] [li] can be {{!Asttypes.arg_label.Nolabel}[Nolabel]} (non labeled argument), {{!Asttypes.arg_label.Labelled}[Labelled]} (labelled arguments) or {{!Asttypes.arg_label.Optional}[Optional]} (optional argument). Invariant: [n > 0] @٠ ,* [match E0 with P1 -> E1 | ... | Pn -> En] @ ** [try E0 with P1 -> E1 | ... | Pn -> En] @ ]* [Pexp_tuple(el)] represents - [(E1, ..., En)] when [el] is [(None, E1); ...; (None, En)] - [(~L1:E1, ..., ~Ln:En)] when [el] is [(Some L1, E1); ...; (Some Ln, En)] - A mix, e.g., [(~L1:E1, E2)] when [el] is [(Some L1, E1); (None, E2)] Invariant: [n >= 2] @f * [Pexp_construct(C, exp)] represents: - [C] when [exp] is [None], - [C E] when [exp] is [Some E], - [C (E1, ..., En)] when [exp] is [Some (Pexp_tuple[E1;...;En])] @; * [Pexp_variant(`A, exp)] represents - [`A] when [exp] is [None] - [`A E] when [exp] is [Some E] @ * [Pexp_record([(l1,P1) ; ... ; (ln,Pn)], exp0)] represents - [{ l1=P1; ...; ln=Pn }] when [exp0] is [None] - [{ E0 with l1=P1; ...; ln=Pn }] when [exp0] is [Some E0] Invariant: [n > 0] ?ݠ(* [E.l] ?/* [E1.l <- E2] ?6* [[| E1; ...; En |]] ?n:* [if E1 then E2 else E3] ?F+* [E1; E2] ?(8* [while E1 do E2 done] ? 6* [Pexp_for(i, E1, E2, direction, E3)] represents: - [for i = E1 to E2 do E3 done] when [direction] is {{!Asttypes.direction_flag.Upto}[Upto]} - [for i = E1 downto E2 do E3 done] when [direction] is {{!Asttypes.direction_flag.Downto}[Downto]} >ܠ,* [(E : T)] > * [Pexp_coerce(E, from, T)] represents - [(E :> T)] when [from] is [None], - [(E : T0 :> T)] when [from] is [Some T0]. >** [E # m] >q,* [new M.c] >P+* [x <- 2] >+ * [{< x1 = E1; ...; xn = En >}] =0* [let SI in E] =ޠ k* [assert E]. Note: [assert false] is treated in a special way by the type-checker. =Š+* [lazy E] = * Used for method bodies. Can only be used as the expression under {{!class_field_kind.Cfk_concrete}[Cfk_concrete]} for methods (not values). =3* [object ... end] =p6* [fun (type t) -> E] =L &* [(module ME)] or [(module ME : S)]. =) J* - [let* P = E0 in E1] - [let* P0 = E00 and* P1 = E01 in E1] =** [[%id]] <&* [.] <䠠 E* Values of type {!case} represents [(P -> E)] or [(P when E0 -> E)] Vd ]* [Pparam_val (lbl, exp0, P)] represents the parameter: - [P] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]} and [exp0] is [None] - [~l:P] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]} and [exp0] is [None] - [?l:P] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [None] - [?l:(P = E0)] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [Some E0] Note: If [E0] is provided, only {{!Asttypes.arg_label.Optional}[Optional]} is allowed. 5 O* [Pparam_newtype x] represents the parameter [(type x)]. [x] carries the location of the identifier, whereas the [pparam_loc] on the enclosing [function_param] node is the location of the [(type x)] as a whole. Multiple parameters [(type a b c)] are represented as multiple [Pparam_newtype] nodes, let's say: {[ [ { pparam_kind = Pparam_newtype a; pparam_loc = loc1 }; { pparam_kind = Pparam_newtype b; pparam_loc = loc2 }; { pparam_kind = Pparam_newtype c; pparam_loc = loc3 }; ] ]} Here, the first loc [loc1] is the location of [(type a b c)], and the subsequent locs [loc2] and [loc3] are the same as [loc1], except marked as ghost locations. The locations on [a], [b], [c], correspond to the variables [a], [b], and [c] in the source code. 4⠠ * In [Pfunction_cases (_, loc, attrs)], the location extends from the start of the [function] keyword to the end of the last case. The compiler will only use typechecking-related attributes from [attrs], e.g. enabling or disabling a warning. 3 H* See the comment on {{!expression_desc.Pexp_function}[Pexp_function]}. V: H* See the comment on {{!expression_desc.Pexp_function}[Pexp_function]}. 3g9* {2 Value descriptions} V"<* [... [\@\@id1] [\@\@id2]] 2ܠ * Values of type {!value_description} represents: - [val x: T], when {{!value_description.pval_prim}[pval_prim]} is [[]] - [external x: T = "s1" ... "sn"] when {{!value_description.pval_prim}[pval_prim]} is [["s1";..."sn"]] V8* {2 Type declarations} V3* [('a1,...'an) t] 1 1* [... constraint T1=T1' ... constraint Tn=Tn'] 1Ġ6* for [= private ...] 13* represents [= T] 1<* [... [\@\@id1] [\@\@id2]] 1m * Here are type declarations and their representation, for various {{!type_declaration.ptype_kind}[ptype_kind]} and {{!type_declaration.ptype_manifest}[ptype_manifest]} values: - [type t] when [type_kind] is {{!type_kind.Ptype_abstract}[Ptype_abstract]}, and [manifest] is [None], - [type t = T0] when [type_kind] is {{!type_kind.Ptype_abstract}[Ptype_abstract]}, and [manifest] is [Some T0], - [type t = C of T | ...] when [type_kind] is {{!type_kind.Ptype_variant}[Ptype_variant]}, and [manifest] is [None], - [type t = T0 = C of T | ...] when [type_kind] is {{!type_kind.Ptype_variant}[Ptype_variant]}, and [manifest] is [Some T0], - [type t = {l: T; ...}] when [type_kind] is {{!type_kind.Ptype_record}[Ptype_record]}, and [manifest] is [None], - [type t = T0 = {l : T; ...}] when [type_kind] is {{!type_kind.Ptype_record}[Ptype_record]}, and [manifest] is [Some T0], - [type t = ..] when [type_kind] is {{!type_kind.Ptype_open}[Ptype_open]}, and [manifest] is [None]. V <* Invariant: non-empty list /Ҡ:* [l : T [\@id1] [\@id2]] / * - [{ ...; l: T; ... }] when {{!label_declaration.pld_mutable}[pld_mutable]} is {{!Asttypes.mutable_flag.Immutable}[Immutable]}, - [{ ...; mutable l: T; ... }] when {{!label_declaration.pld_mutable}[pld_mutable]} is {{!Asttypes.mutable_flag.Mutable}[Mutable]}. Note: [T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}. U=* [C of ... [\@id1] [\@id2]] . * Values of type {!constructor_declaration} represents the constructor arguments of: - [C of T1 * ... * Tn] when [res = None], and [args = Pcstr_tuple [T1; ... ; Tn]], - [C: T0] when [res = Some T0], and [args = Pcstr_tuple []], - [C: T1 * ... * Tn -> T0] when [res = Some T0], and [args = Pcstr_tuple [T1; ... ; Tn]], - [C of {...}] when [res = None], and [args = Pcstr_record [...]], - [C: {...} -> T0] when [res = Some T0], and [args = Pcstr_record [...]]. -;:* ... [\@\@id1] [\@\@id2] ,u d* Definition of new extensions constructors for the extensive sum type [t] ([type t += ...]). Uܠ=* [C of ... [\@id1] [\@id2]] +`<* [... [\@\@id1] [\@\@id2]] *à 1* Definition of a new exception ([exception E]). UǠ G* [Pext_decl(existentials, c_args, t_opt)] describes a new extension constructor. It can be: - [C of T1 * ... * Tn] when: {ul {- [existentials] is [[]],} {- [c_args] is [[T1; ...; Tn]],} {- [t_opt] is [None]}.} - [C: T0] when {ul {- [existentials] is [[]],} {- [c_args] is [[]],} {- [t_opt] is [Some T0].}} - [C: T1 * ... * Tn -> T0] when {ul {- [existentials] is [[]],} {- [c_args] is [[T1; ...; Tn]],} {- [t_opt] is [Some T0].}} - [C: 'a... . T1 * ... * Tn -> T0] when {ul {- [existentials] is [['a;...]],} {- [c_args] is [[T1; ... ; Tn]],} {- [t_opt] is [Some T0].}} *7 G* [Pext_rebind(D)] re-export the constructor [D] with the new name [C] *5* {1 Class language} U .* {2 Type expressions for the class language} U8* [... [\@id1] [\@id2]] )l ** - [c] - [['a1, ..., 'an] c] (ڠ3* [object ... end] ( m* [Pcty_arrow(lbl, T, CT)] represents: - [T -> CT] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]}, - [~l:T -> CT] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]}, - [?l:T -> CT] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]}. ((* [%id] (5* [let open M in CT] (g * Values of type [class_signature] represents: - [object('selfpat) ... end] - [object ... end] when {{!class_signature.pcsig_self}[pcsig_self]} is {{!core_type_desc.Ptyp_any}[Ptyp_any]} U<* [... [\@\@id1] [\@\@id2]] ' /* [inherit CT] &-* [val x: T] &g b* [method x: T] Note: [T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}. &/7* [constraint T1 = T2] & /* [[\@\@\@id]] %+* [[%%id]] %۠<* [... [\@\@id1] [\@\@id2]] $C * Values of type [class_expr class_infos] represents: - [class c = ...] - [class ['a1,...,'an] c = ...] - [class virtual c = ...] They are also used for "class type" declaration. U /* {2 Value expressions for the class language} U]8* [... [\@id1] [\@id2]] # >* [c] and [['a1, ..., 'an] c] "3* [object ... end] "m * [Pcl_fun(lbl, exp0, P, CE)] represents: - [fun P -> CE] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]} and [exp0] is [None], - [fun ~l:P -> CE] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]} and [exp0] is [None], - [fun ?l:P -> CE] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [None], - [fun ?l:(P = E0) -> CE] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [Some E0]. "? * [Pcl_apply(CE, [(l1,E1) ; ... ; (ln,En)])] represents [CE ~l1:E1 ... ~ln:En]. [li] can be empty (non labeled argument) or start with [?] (optional argument). Invariant: [n > 0] " Q* [Pcl_let(rec, [(P1, E1); ... ; (Pn, En)], CE)] represents: - [let P1 = E1 and ... and Pn = EN in CE] when [rec] is {{!Asttypes.rec_flag.Nonrecursive}[Nonrecursive]}, - [let rec P1 = E1 and ... and Pn = EN in CE] when [rec] is {{!Asttypes.rec_flag.Recursive}[Recursive]}. !蠠.* [(CE : CT)] !ʠ** [[%id]] !5* [let open M in CE] ! * Values of type {!class_structure} represents: - [object(selfpat) ... end] - [object ... end] when {{!class_structure.pcstr_self}[pcstr_self]} is {{!pattern_desc.Ppat_any}[Ppat_any]} U]<* [... [\@\@id1] [\@\@id2]]  |* [Pcf_inherit(flag, CE, s)] represents: - [inherit CE] when [flag] is {{!Asttypes.override_flag.Fresh}[Fresh]} and [s] is [None], - [inherit CE as x] when [flag] is {{!Asttypes.override_flag.Fresh}[Fresh]} and [s] is [Some x], - [inherit! CE] when [flag] is {{!Asttypes.override_flag.Override}[Override]} and [s] is [None], - [inherit! CE as x] when [flag] is {{!Asttypes.override_flag.Override}[Override]} and [s] is [Some x]  * [Pcf_val(x,flag, kind)] represents: - [val x = E] when [flag] is {{!Asttypes.mutable_flag.Immutable}[Immutable]} and [kind] is {{!class_field_kind.Cfk_concrete}[Cfk_concrete(Fresh, E)]} - [val virtual x: T] when [flag] is {{!Asttypes.mutable_flag.Immutable}[Immutable]} and [kind] is {{!class_field_kind.Cfk_virtual}[Cfk_virtual(T)]} - [val mutable x = E] when [flag] is {{!Asttypes.mutable_flag.Mutable}[Mutable]} and [kind] is {{!class_field_kind.Cfk_concrete}[Cfk_concrete(Fresh, E)]} - [val mutable virtual x: T] when [flag] is {{!Asttypes.mutable_flag.Mutable}[Mutable]} and [kind] is {{!class_field_kind.Cfk_virtual}[Cfk_virtual(T)]} ՠ * - [method x = E] ([E] can be a {{!expression_desc.Pexp_poly}[Pexp_poly]}) - [method virtual x: T] ([T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}) 7* [constraint T1 = T2] 2* [initializer E] h/* [[\@\@\@id]] O+* [[%%id]] 76* {1 Module language} U; /* {2 Type expressions for the module language} U08* [... [\@id1] [\@id2]] R !* [Pmty_ident(S)] represents [S] ʠ0* [sig ... end] <* [functor(X : MT1) -> MT2] 0* [MT with ...] p6* [module type of ME] W** [[%id]] >/* [(module M)] '* [()]  * [Named(name, MT)] represents: - [(X : MT)] when [name] is [Some X], - [(_ : MT)] when [name] is [None] ޠ F* - [val x: T] - [external x: T = "s1" ... "sn"]  (* [type t1 = ... and ... and tn = ...] ݠ ** [type t1 := ... and ... and tn := ...] 3* [type t1 += ...] 5* [exception C of T]  %* [module X = M] and [module X : MT] t2* [module X := M] [ -* [module rec X1 : MT1 and ... and Xn : MTn] = +* [module type S = MT] and [module type S] $;* [module type S := ...]  +* [open X] /* [include MT] ٠ (* [class c1 : ... and ... and cn : ...]  /* [class type ct1 = ... and ... and ctn = ...] /* [[\@\@\@id]] +* [[%%id]] g<* [... [\@\@id1] [\@\@id2]] / :* Values of type [module_declaration] represents [S : MT] U?<* [... [\@\@id1] [\@\@id2]] f ;* Values of type [module_substitution] represents [S := M] U/<* [... [\@\@id1] [\@\@id2]]  * Values of type [module_type_declaration] represents: - [S = MT], - [S] for abstract module type declaration, when {{!module_type_declaration.pmtd_type}[pmtd_type]} is [None]. U n* Values of type ['a open_infos] represents: - [open! X] when {{!open_infos.popen_override}[popen_override]} is {{!Asttypes.override_flag.Override}[Override]} (silences the "used identifier shadowing" warning) - [open X] when {{!open_infos.popen_override}[popen_override]} is {{!Asttypes.override_flag.Fresh}[Fresh]} U U* Values of type [open_description] represents: - [open M.N] - [open M(N).O] T q* Values of type [open_declaration] represents: - [open M.N] - [open M(N).O] - [open struct ... end] TӠ ?* Values of type [include_description] represents [include MT] T ?* Values of type [include_declaration] represents [include ME] T * [with type X.t = ...] Note: the last component of the longident must match the name of the type_declaration. 8* [with module X.Y = Z] ⠠=* [with module type X.Y = Z]  $* [with module type X.Y := sig end]  6* [with type X.t := ..., same format as [Pwith_type]] p9* [with module X.Y := Z] C 0* {2 Value expressions for the module language} T8* [... [\@id1] [\@id2]] &* [X] 13* [struct ... end] ;* [functor(X : MT1) -> ME]  -* [ME1(ME2)]  ܠ** [ME1()]  à.* [(ME : MT)]  ,* [(val E)]  ** [[%id]]  t&* [E]  ՠ F* [Pstr_value(rec, [(P1, E1 ; ... ; (Pn, En))])] represents: - [let P1 = E1 and ... and Pn = EN] when [rec] is {{!Asttypes.rec_flag.Nonrecursive}[Nonrecursive]}, - [let rec P1 = E1 and ... and Pn = EN ] when [rec] is {{!Asttypes.rec_flag.Recursive}[Recursive]}.  =* - [val x: T] - [external x: T = "s1" ... "sn" ] '* [type t1 = ... and ... and tn = ...]  t3* [type t1 += ...]  [ 9* - [exception C of T] - [exception C = M.X]  B2* [module X = ME]  ) -* [module rec X1 = ME1 and ... and Xn = MEn]  7* [module type S = MT]  +* [open X]  ٠ (* [class c1 = ... and ... and cn = ...]  /* [class type ct1 = ... and ... and ctn = ...]  /* [include ME]  /* [[\@\@\@id]]  k+* [[%%id]]  N * - [Pvc_constraint { locally_abstract_univars=[]; typ}] is a simple type constraint on a value binding: [ let x : typ] - More generally, in [Pvc_constraint { locally_abstract_univars; typ}] [locally_abstract_univars] is the list of locally abstract type variables in [ let x: type a ... . typ ] - [Pvc_coercion { ground=None; coercion }] represents [let x :> typ] - [Pvc_coercion { ground=Some g; coercion }] represents [let x : g :> typ]  $* [let pat : type_constraint = exp] T =* Values of type [module_binding] represents [module X = ME] T/* {1 Toplevel} 7* {2 Toplevel phrases} 6* [#use], [#load] ... t@-./boot/ocamlc)-nostdlib"-I&./boot*-use-prims2runtime/primitives"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I'parsing"-I%utils"-I'parsing"-I&typing"-I(bytecomp"-I,file_formats"-I&lambda"-I*middle_end"-I2middle_end/closure"-I2middle_end/flambda"-I=middle_end/flambda/base_types"-I'asmcomp"-I&driver"-I(toplevel"-I%tools"-I'runtime"-I1otherlibs/dynlink"-I-otherlibs/str"-I4otherlibs/systhreads"-I.otherlibs/unix"-I8otherlibs/runtime_events"-c]w]x T/home/teraram/ci/builds/workspace/parallel-build/flambda/false/label/ocaml-manycores >10/.-,+*)('&%$#"! @@07]:L 3]]]]]]]]@]@@\0>n{T8cئ8CamlinternalFormatBasics0%FU(Q/Tu0CamlinternalLazy0&͂7 Pˆ*Format_doc0]mWϓ:Mݠ(Location0a7cK_H%9O0s `7mɕc]ʐ0Uҩ=p>*%"e&Stdlib0Lku]8_٠.Stdlib__Buffer08APF< t..Stdlib__Domain0:M;׉<O$Ġ.Stdlib__Either0Vy`u~c à.Stdlib__Format0ܚ#G7m|,Stdlib__Lazy0* -S$.)"0D.Stdlib__Lexing0e<.V +Stdlib__Seq0nwzG&amg+Stdlib__Sys0 -ռ鱦s5/-Stdlib__Uchar056uf4[_(Warnings0mJɒkgr*%"eA  ?@~@W)0++[++o@9%X8@2;1H͓EϰIғG@#"}55@JBG[ѓ[N@@@@324 2KKx@ð.. @C4>@!!X@U @ U E2)1@X_2o@@/R!ޕ!@Wx%n,W, @00@@2j@VwVVWB!.(V'**@UɰX]0@  O@W7@@@$#Y@EDܰN˕N@@@&&[@~@43TÓTpYҒT@@TT>@@('-V-(32@@W̒'@YM@A@;`@.-8e8(YoL+QlO#@!ȕ!@KH@  lVS?8e8$A;ڰ\’\@RP@$ۓ#ҰX5@Y799a@@Tz@@@Ft224@@qaZU\@gS6W6E@+>L2KQO@IF@1ޕ1KyHNNr@@$#@%%d@,,ٰ22\@++@ ד VT)L4K@SY('@:(ZT}@%ӕ%++*@NJNO*NS Q2@@GD˓?@\l[@@X_)M<M@!1 7$n#747"[}[@*Y*EYŒER@ܓ"*!9\9,@':&E@@X*@Vc@@43JKGUJH\@@  +ē+ C=q@W@  6LxW.@SQ@A;\\@)(@<YYŒ8YF0@@++@1^0@@K.-Ӱ8c8)@88cBy<@@$#B0 /9A9@ o @@ ̓ P @Yy5@M.(DAg;d\\'@KXF@@@''@@@@Yq2@ߓɰ" !*@WƒG2•2q:`:AC>=@@@:G:C"=oTЕT@  axNB<5@ e 0M]M9@@@}@ } -A66_@&u&GOȕO[UϓU}@0L/6Օ6@#G#4@Nd22SR*@W @WL&W̰6687@  W@8d8V@..v/.Ұ54ҰE6@'@5ە5D?P@NNP@! ~@1.1 @@ 3@2P1@  R@Z_8@*ߕ*A8;Ca=FFdN<N @88i@WY.Q[[V@''Z@z@@8)(5z4i@Q ('@ӓ%$CP=@@MMX@J A˓;UrU+@A;[O@@"u!F/A8@  Ͱ  UURUUf@SXQ7@͓Y-BCh@@  c@JxGoSQ@J@%z$%@SCQ@--t00:@@@160@ Z:`@  @=FAGAG @!@(ϕ(`@E@]@7b6E@@JG@ZՒ8A@C7z7!@@\[P@ 1 @@LmJړG@@  jTJRW\\r@Y3 UHSd@D2֕2Z::@@"L!+@@@@KH@s[Y*[yM@lB@X:G{GANNw[O@Y$b1M0TR@E?@ ٕ xZ1@P$P@W h++@M0J\\@Yk 20N0 BB<;KH@  1C=MK@X' O"O@|/"!հC=@@YΒ$7@++@*)Ұ[;߰\W@"ٓ!\U@CL=nE@9KjHRW]V@@Z/@Y^E ?LmI@,`,MLIUS@@@;m;N@X483@ ذ@_6_@7'M:@Z((@4m4*@@PPr@@3s2\O@F }5$4@Y!!v@@@[2@ bBR<4_d_N@Zg(r@00M}JPO@Bt<[@ڕ@ғ@2~2b@;@@P@@