Caml1999I037qge)Parsetree(constant;@@+pconst_desc#@@-constant_desc@@@o5parsing/parsetree.mliZZ@@B@*pconst_loci@@(Location!t@@@n[[@@&C@@@A@@@@@Y\@@@@*@@A@;@@.Pconst_integerj&stringQ@@@z&optionL$charB@@@x@@@y@@7_248_2\@@LD@+Pconst_chark@@@w@@Ee Fe5@@ZE@-Pconst_stringl,@@@vK!t@@@u1<@@@s@@@t@@dfWYefW@@yF@,Pconst_floatmK@@@rIG@@@p@@@q@@|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%9R@@9j@)ppt_attrs@@@@@/SX0Sn@@Dk@@@A@@@@@34ot@@@@HO@B@;@@(prf_desc@@.row_field_desc)@@@°EF@@Zl@'prf_loc@@D!t@@@ST@@hm@.prf_attributes@@@@@^_@@sn@@@A@@@@@bc@@@@wP@B@&;@@$Rtag#loc%label@@@@@@Ƞ$boolE@@@ƠU@@@@@@@@+@@o@(Rinheritc@@@@@ i k i @@p@@@A@@@@@@@@@Q@B@;@@(pof_desc@@1object_field_desc+@@@˰    @@q@'pof_loc@@!t@@@ʰ    @@r@.pof_attributes@@8@@@ɰ   !@@s@@@A@@@@@  !!@@@@R@B@&;@@$Otag3#loc8%label@@@@@@Ϡ@@@@@!!!!>@@t@(Oinherit@@@@@!?!A!?!X@@ u@@@A@@@@@!!@@@@ S@B@;@@)ppat_desc@@,pattern_desc-@@@Ӱ !! !!@@v@(ppat_loc@@!t@@@Ұ!!!!@@,w@.ppat_loc_stack@@@@@Ѱ"!!#!!@@7x@/ppat_attributes@@@@@а-!!.!"@@By@@@A@@@@@1!o!o2"!"&@@@@FT@B@1;@@(Ppat_any@@>";"=?";"G@@Sz@(Ppat_var#loc*@@@@@@@@R"a"cS"a"{@@g{@*Ppat_alias@@@#locB@@@@@@@@j""k""@@|@-Ppat_constant@@@@@x""y"#@@}@-Ppat_interval@@@@@@@@#d#f#d#@@~@*Ppat_tuple @q|@@@@@@@d@@@@@@@@+closed_flag@@@@@$%$'$%$l@@@.Ppat_construct#loc!t@@@@@@@F/#loc@@@@@@@@@@@@@@@@@@@@&&&&@@@,Ppat_variant J%label@@@ˠ@@@@@@@@(=(?(=(g@@@+Ppat_record }@j#loc!t@@@@@@젠@@@@@@@@@}+closed_flag@@@@@'(((():@@<@*Ppat_array @@@@@@@@9**:**@@N@'Ppat_or @@@@@@@@J**K**@@_@/Ppat_constraint @@@&@@@@@[ ++ \ ++1@@p@)Ppat_type#locu!t@@@@@@@@q!+L+Nr!+L+l@@@)Ppat_lazy9@@@@@~"++"++@@@+Ppat_unpack#loccn@@@@@@@@@ߠn@@@@@@@@#++#++@@@.Ppat_exceptionh@@@@@*-Q-S*-Q-n@@@+Ppat_effectu@@@٠y@@@@@+--+--@@@.Ppat_extension@@@@@,--,--@@@)Ppat_open0#loc!t@@@@@@֠@@@@@-..-../@@@@@A@@@@@"("(@@@@U@B@;@@)pexp_desc@@/expression_desc/@@@ 3.~.3.~.@@@(pexp_loc@@!t@@@ 4.. 4..@@@.pexp_loc_stack@@@@@ 5..5..@@(@/pexp_attributes@@@@@6..6./@@3@@@A@@@@@"1.g.g#7//$@@@@7V@B@1;@@*Pexp_ident#loc@!t@@@m@@@n@@<:/</>=:/</]@@Q@-Pexp_constant@@@l@@I=//J=//@@^@(Pexp_let(rec_flag@@@kϠ-value_bindingf@@@i@@@j@@@h@@h@00i@00R@@}@-Pexp_function.function_param4@@@f@@@gT/type_constraint6@@@d@@@e-function_body5@@@c@@G11H12@@@*Pexp_applyM@@@b@)arg_label@@@_@`@@@^@@`@@@a@@W44W44@@@*Pexp_matchn@@@]5$case0@@@[@@@\@@b6m6ob6m6@@@(Pexp_try@@@ZN@@@X@@@Y@@d66d66@@@*Pexp_tuple `@Ƞ@@@T@@@U@@@@S@@V@@@W@@f7)7+f7)7\@@@.Pexp_construct!f#loc!t@@@Q@@@R@@@O@@@P@@ q88!q88@@5@,Pexp_variant"%label@@@N@@@L@@@M@@8w999w9:@@M@+Pexp_record#@#locZ!t@@@H@@@I@ @@@G@@J@@@K3@@@E@@@F@@e|::f|::@@z@*Pexp_field$"@@@D#loc!t@@@B@@@C@@;;;@@<0<2<0@@@/Pexp_constraint+@@@.@@@-@@?F?H?F?s@@0@+Pexp_coerce,@@@,@@@*@@@+@@@)@@5??6??@@J@)Pexp_send-@@@(#loc%label@@@&@@@'@@N@k@mO@k@@@c@(Pexp_new.#loch!t@@@$@@@%@@d@@e@@@@y@/Pexp_setinstvar/#loc%label@@@"@@@#-@@@!@@}@@~@A@@@-Pexp_override0@#loc%label@@@@@@@O@@@@@@@@ @@AAAAF@@@0Pexp_struct_item1.structure_itemc@@@d@@@@@ArAtArA@@@+Pexp_assert2q@@@@@AAAA@@@)Pexp_lazy3~@@@@@BUBWBUBp@@@)Pexp_poly4@@@@@@@@@@@BBBB@@@+Pexp_object5/class_structureK@@@@@ClCnClC@@ @,Pexp_newtype6Y#loc@@@@@@@@@@@ CC CC@@ !@)Pexp_pack7+module_expr`@@@v@@@@@@@@ %CC &CD"@@ :@*Pexp_letop8%letop1@@@ @@ 5DTDV 6DTDk@@ J@.Pexp_extension9j@@@ @@ BDD CDD@@ W@0Pexp_unreachable:@@ KDD LDE@@ `@@@A@@@@@ O9/&/&@@@@ cW@B@;@@&pc_lhs;@@@@@r ]E$E) ^E$E9@@ r@(pc_guard<@@ ;@@@p@@@q mE:E? nE:E[@@ @&pc_rhs=@@(@@@o xE\Ea yE\Et@@ @@@A@@@@@ |EE }EuEy@@@@ X@B@P;@@$let_>@@*binding_op2@@@v EE EE@@ @$ands?@@ @@@t@@@u EE EF@@ @$body@@@Y@@@s FF  FF@@ @@@A@@@@@ EE FF"@@@@ Y@B@(;@@'pbop_opA@@ #loc @@@z@@@{ F9F= F9FR@@ @(pbop_patB@@@@@y FSFW FSFj@@ @(pbop_expC@@@@@x FkFo FkF@@ @(pbop_locD@@ !t@@@w FF FF@@ @@@A@@@@@ F$F$ FF@@@@ Z@B@3function_param_desc3;@@*Pparam_valE V)arg_label@@@ נ@@@@@@@@@~@@ FF FF@@ "@.Pparam_newtypeF r#loc @@@|@@@}@@ !I^I` "I^I~@@ 6@@@A@@@@@ %FF@@@@ 9[@B@;@@*pparam_locG@@ '!t@@@ 6LL 7LM@@ K@+pparam_descH@@P@@@ BMM  CMM.@@ W@@@A@@@@@ FLL GM/M2@@@@ [\@B@;@@.Pfunction_bodyI @@@@@ WMHMJ XMHMh@@ l@/Pfunction_casesJ נ@@@@@@ a!t@@@@@@@@ tMiMk uMiM@@ @@@A@@@@@ xM4M4@@@@ ]@B@;@@+PconstraintK S@@@@@ OO OO1@@ @'PcoerceL h d@@@@@@ i@@@@@ O2O4 O2O]@@ @@@A@@@@@ NN@@@@ ^@B@1value_description7;@@)pval_nameM@@ #loc @@@@@@  OO  OP@@ @)pval_typeN@@ @@@  PP   PP@@ @)pval_primO@@ B @@@@@@ P P% P P<@@ @/pval_attributesP@@ R@@@ P=PB P=P^@@ @(pval_locQ@@ !t@@@ PP PP@@ @@@A@@@@@  OO PP@@@@ _@B@0type_declaration8;@@*ptype_nameR@@ [#loc @@@@@@ QQ QQ@@ @,ptype_paramsS@@ @ @@@@@ ~(variance@@@@ +injectivity@@@@@@@@@@ 0RR 1RR?@@ E@1ptype_constraintsT@@ @ @@@@ @@@@ A!t@@@@@@@@ Q R^Rc R R^R@@ f@*ptype_kindU@@)type_kind9@@@ _"RR `"RR@@ t@-ptype_privateV@@ ,private_flag@@@ l#RR m#RS@@ @.ptype_manifestW@@ J F@@@@@@ |$S7S< }$S7S]@@ @0ptype_attributesX@@ @@@ %SwS| %SwS@@ @)ptype_locY@@ !t@@@ &SS &SS@@ @@@A@@@@@ QQ 'SS@@@@ `@B@C;@@.Ptype_abstractZ@@ CXX CXX@@ @-Ptype_variant[ &7constructor_declaration;@@@@@@@@ DXX DXX@@ @,Ptype_record\ ;1label_declaration:@@@@@@@@ EXX EXY@@ @*Ptype_open]@@ FY1Y3 FY1Y?@@ @.Ptype_external^ @@@@@ GY@YB GY@Y\@@ @@@A@@@@@ BXX@@@@ a@B@$;@@(pld_name_@@ Q#loc @@@@@@ KY|Y KY|Y@@ @+pld_mutable`@@ c,mutable_flag@@@ LYY LYY@@ "@(pld_typea@@ @@@ MYY MYY@@ -@'pld_locb@@ !t@@@ &NYY 'NYY@@ ;@.pld_attributesc@@ @@@ 1OYY 2OYZ @@ F@@@A@@@@@ 5IY^Y^ 6PZ,Z1@@@@ Jb@B@;@@(pcd_named@@ #loc #@@@@@@ K^\\ L^\\3@@ `@(pcd_varse@@ ɠ #loc 9@@@@@@@@@ b_\4\9 c_\4\S@@ w@(pcd_argsf@@5constructor_arguments<@@@ p`\T\Y q`\T\y@@ @'pcd_resg@@ N J@@@@@@ a\z\ a\z\@@ @'pcd_loch@@ !t@@@ b\\ b\\@@ @.pcd_attributesi@@ @@@ c\\ c\\@@ @@@A@@@@@ \[[ d\\@@@@ c@B@6;@@+Pcstr_tuplej ! }@@@@@@@@ g]] g]]<@@ @,Pcstr_recordk 3@@@@@@@@ h]=]? h]=]g@@ @@@A@@@@@ f\\@@@@ d@B@.type_extension=;@@+ptyext_pathl@@ 1#loc !t@@@@@@̰ y`(`- y`(`J@@ @-ptyext_paramsm@@ `@ @@@Ƞ@@ V(variance@@@Ơ@ ]+injectivity@@@@@@@@@@ʰ z`K`P z`K`@@ @3ptyext_constructorsn@@ 5extension_constructor>@@@@@@İ {`` {``@@ 0@.ptyext_privateo@@ ~,private_flag@@@° (|`` )|``@@ =@*ptyext_locp@@ '!t@@@ 6}`` 7}`a@@ K@1ptyext_attributesq@@ @@@ A~aa B~aa%@@ V@@@A@@@@@ Ew` `  FaFaK@@@@ Ze@B@4;@@)pext_namer@@ #loc 3@@@@@@Ѱ [aa \aa@@ p@)pext_kinds@@:extension_constructor_kind@@@@ϰ iaa jab@@ ~@(pext_loct@@ h!t@@@ΰ wb b% xb b:@@ @/pext_attributesu@@ @@@Ͱ b;b@ b;b\@@ @@@A@@@@@ aa bb@@@@ f@B@.type_exception?;@@2ptyexn_constructorv@@@@@԰ bb bb@@ @*ptyexn_locw@@ !t@@@Ӱ bb bb@@ @1ptyexn_attributesx@@ "@@@Ұ bb bc@@ @@@A@@@@@ bb c2c5@@@@ g@B@T;@@)Pext_decly 8 !#loc @@@@@@@@@ܠh@@@٠  @@@@@@@@ cc cc@@ @+Pext_rebindz C#loc !t@@@@@@@@ g,g. g,gN@@ @@@A@@@@@ cmcm@@@@ h@B@*class_typeA;@@)pcty_desc{@@/class_type_descB@@@߰ hh hh#@@ @(pcty_loc|@@ !t@@@ްh$h)h$h>@@.@/pcty_attributes}@@ @@@ݰ$h?hD%h?h`@@9@@@A@@@@@(gg)hh@@@@=i@B@&;@@+Pcty_constr~ #loc F!t@@@@@@  @@@@@@@@KhhLhh@@`@.Pcty_signature/class_signatureC@@@@@[ii\ii*@@p@*Pcty_arrow )arg_label@@@ 9@@@u@@@@@siDiFtiDix@@@.Pcty_extension @@@@@jjjk@@@)Pcty_open0open_descriptionZ@@@"@@@@@kk!kkM@@@@@A@@@@@hh@@@@j@B@E;@@*pcsig_self@@ q@@@kkkk@@@,pcsig_fields@@$0class_type_fieldD@@@@@@kkkk@@@@@A@@@@@kjkjkk@@@@k@B@;@@)pctf_desc@@5class_type_field_descE@@@llll@@@(pctf_loc@@!t@@@lllm@@@/pctf_attributes@@ Z@@@mmmm3@@@@@A@@@@@llmVm[@@@@l@B@&;@@,Pctf_inherit@@@@@mym{mym@@@(Pctf_val@f#lock%label@@@@@@@s,mutable_flag@@@@z,virtual_flag@@@@ @@@@@@@)mm*mm@@>@+Pctf_method@#loc%label@@@@@@@,private_flag@@@@,virtual_flag@@@@ @@@@@@@Un n Vn nS@@j@/Pctf_constraint@1@@@@6@@@@@@@knnlnn@@@.Pctf_attributev@@@@@xo oyo o,@@@.Pctf_extension @@@@@oBoDoBoa@@@@@A@@@@@m]m]@@@@m@B@+class_infosF;!a@@A(pci_virt@@,virtual_flag@@@oooo@@@*pci_params@@@~@@@ @@(variance@@@ @+injectivity@@@@@ @@ @@@ oooo@@@(pci_name@@)#loc@@@@@@ooop@@@(pci_expr@@Npp pp@@ @'pci_loc@@!t@@@pppp1@@ @.pci_attributes@@k@@@p2p7p2pR@@ @@@A@Y@@@@@ototpupz@@@@n@B@1class_descriptionG;@@@A@@@@@@@@@@qDqDqDqr@@@@'o@B@6class_type_declarationH;@@@A@@@@@@@@@@$qtqt%qtq@@@@9p@B@*class_exprI;@@(pcl_desc@@/class_expr_descJ@@@8qq9qr@@M @'pcl_loc@@7!t@@@FrrGrr.@@[ @.pcl_attributes@@@@@Qr/r4Rr/rO@@f@@@A@@@@@UqqVrnrs@@@@jq@B@&;@@*Pcl_constr#locs!t@@@,@@@-B@@@*@@@+@@xrryrr@@@-Pcl_structure@@@)@@rrrs @@@'Pcl_fun)arg_label@@@(kL@@@&@@@'\@@@%{@@@$@@ s%s' s%sh@@@)Pcl_apply@@@#*@)arg_label@@@ @v@@@@@!@@@"@@vvvvT@@@'Pcl_let,(rec_flag@@@M ~@@@@@@>@@@@@ wLwN wLw@@@.Pcl_constraintK@@@@@@@@'xx'xy@@ @-Pcl_extension)@@@@@(y$y&(y$yB@@@(Pcl_open@@@m@@@@@)ySyU)ySy@@'@@@A@@@@@ruru@@@@*r@B@*;@@*pcstr_self@@@@@0$-yy%-yy@@9@,pcstr_fields@@+class_fieldL@@@.@@@/7.yy8.yy@@L@@@A@@@@@;+yy</yy@@@@Ps@B@;@@(pcf_desc@@0class_field_descM@@@3M8zzN8z{@@b@'pcf_loc@@L!t@@@2[9{{\9{{/@@p@.pcf_attributes@@@@@1f:{0{5g:{0{P@@{@@@A@@@@@j6zzk;{s{x@@@@t@B@&;@@+Pcf_inherit-override_flag@@@H@@@GX#loch@@@D@@@E@@@F@@>{{>{{@@@'Pcf_val@#loc%label@@@A@@@B@,mutable_flag@@@@@0class_field_kindN@@@?@@C@@M~Z~\M~Z~@@@*Pcf_method@"#loc'%label@@@<@@@=@/,private_flag@@@;@(@@@:@@>@@\\@@@.Pcf_constraint@@@@8@@@@7@@9@@bb@@ @/Pcf_initializer@@@6@@cc#@@ @-Pcf_attribute @@@5@@d<>d<Z@@#!@-Pcf_extensionC@@@4@@eprep@@0"@@@A@@@@@={z{z@@@@3u@B@n;@@+Cfk_virtual@@@K@@/h0h@@D#@,Cfk_concrete-override_flag@@@J@@@I@@BiCi@@W$@@@A@@@@@Fg@@@@Zv@B@1class_declarationO;@@@AF@@@L@@@M@@@@WkXk3@@@@lw@B@+module_typeP;@@)pmty_desc@@0module_type_descQ@@@Pkrlr@@%@(pmty_loc@@j!t@@@Oyszs@@&@/pmty_attributes@@@@@Ntt@@'@@@A@@@@@pu@@@@x@B@&;@@*Pmty_ident#loc!t@@@[@@@\@@x8:x8Y@@(@.Pmty_signature@@@Z@@yy@@)@,Pmty_functor1functor_parameterR@@@Yf@@@X@@zz@@*@)Pmty_with@@@WH/with_constraint_@@@U@@@V@@||E@@+@+Pmty_typeof @@@T@@}\^}\z@@,@.Pmty_extension@@@S@@~~@@ -@*Pmty_alias\#loc!t@@@Q@@@R@@ @@".@@@A@@@@@w!!@@@@%y@B@Z;@@$Unit@@@@2/@%Named#loc @@@^@@@_@@@`w@@@]@@:-/;-Y@@O0@@@A@@@@@>@@@@Rz@B@;@@@A.signature_itemT@@@a@@@b@@@@QR @@@@f{@B@ ;@@)psig_desc@@3signature_item_descU@@@dc',d'K@@x1@(psig_loc@@b!t@@@cqLQrLf@@2@@@A@@@@@u  vgl@@@@|@B@;@@*Psig_value@@@{@@@@3@)Psig_type(rec_flag@@@z @@@x@@@y@@.@@4@.Psig_typesubst @@@v@@@w@@bdb@@5@+Psig_typext@@@u@@@@6@.Psig_exceptionA@@@t@@"@@7@+Psig_module2module_declarationV@@@s@@>@>c@@8@-Psig_modsubst3module_substitutionW@@@r@@@@9@.Psig_recmodulen$@@@p@@@q@@@@:@,Psig_modtypeÐ7module_type_declarationX@@@o@@686a@@%;@1Psig_modtypesubstĐ@@@n@@@@2<@)Psig_openŐ@@@m@@*+@@?=@,Psig_includeƐ3include_description]@@@l@@:"$;"I@@O>@*Psig_classǐF@@@j@@@k@@M_aN_@@b?@/Psig_class_typeȐ͠F@@@h@@@i@@`a@@u@@.Psig_attributeɐk@@@g@@m(*n(G@@A@.Psig_extensionʐ@@@f@@@e@@~]_]@@B@@@A@@@@@nn@@@@}@B@;@@(pmd_name@@#lochs@@@@@@@@@@@C@(pmd_type@@@@@~@@D@.pmd_attributes@@$@@@}@@E@'pmd_loc@@!t@@@|<A<U@@F@@@A@@@@@V[@@@@~@B@;@@(pms_name@@+#loc@@@@@@@@G@,pms_manifest@@=#loc!t@@@@@@@@H@.pms_attributes@@k@@@@@I@'pms_loc@@!t@@@>C>W@@J@@@A@@@@@  X]@@@@ @B@;@@)pmtd_name@@r#loc@@@@@@!"@@6K@)pmtd_type@@m@@@@@@12@@FL@/pmtd_attributes@@@@@<=$@@QM@(pmtd_loc@@;!t@@@JGLKGa@@_N@@@A@@@@@NObg@@@@c@@B@*open_infosY;!a@@A*popen_expr@@ aDIbDX@@vO@.popen_override@@-override_flag@@@nY^oY|@@P@)popen_loc@@m!t@@@|}}}@@Q@0popen_attributes@@@@@@@R@@@A@Y@@@@@**@@@@A@B@;@@@AE#loc!t@@@@@@@@@@@@@666g@@@@B@B@0open_declaration[;@@@A @@@@@@@@@@@@@@C@B@-include_infos\;!a@@A)pincl_mod@@ @@S@)pincl_loc@@!t@@@@@T@0pincl_attributes@@W@@@@@U@@@A@Y@@@@@hh@@@@D@B@;@@@A88@@@@@@@@@@@@@@E@B@3include_declaration^;@@@A @@@@@@@@@@XXX@@@@#F@B@;;@@*Pwith_typeސw#loc,!t@@@@@@@@@@@,-@@AV@,Pwith_moduleߐ#locF!t@@@@@@#locS!t@@@@@@@@OP@@dW@-Pwith_modtype#loci!t@@@@@@@@@@@i j:@@~X@2Pwith_modtypesubstᐠ#loc!t@@@@@@@@@@@cec@@Y@/Pwith_typesubst␠#loc!t@@@@@@@@@@@@@Z@.Pwith_modsubst㐠#loc!t@@@@@@#loc!t@@@@@@@@EGE|@@[@@@A@@@@@@@@@G@B@ ;@@)pmod_desc@@0module_expr_desca@@@@@\@(pmod_loc@@!t@@@,@@]@/pmod_attributes@@`@@@ -2 -N@@^@@@A@@@@@ mr@@@@H@B@&;@@*Pmod_ident琠[#loc!t@@@@@@@@    @@!_@.Pmod_structure萠@@@@@@@.`@,Pmod_functor鐠j@@@@@@@@*+%@@?a@*Pmod_applyꐠ@@@"@@@@@;LN<Lw@@Pb@/Pmod_apply_unit될/@@@@@HI@@]c@/Pmod_constraint쐠<@@@@@@@@YZ@@nd@+Pmod_unpack퐠@@@@@fg@@{e@.Pmod_extension@@@@@s13t1P@@f@@@A@@@@@w tt@@@@I@B@g;@@@A@@@@@@@@@@bbb@@@@J@B@;@@)pstr_desc@@3structure_item_descd@@@İ@@g@(pstr_loc@@!t@@@ð@@h@@@A@@@@@@@@@K@B@;@@)Pstr_evall@@@ܠ2@@@@@  +@@i@*Pstr_value%(rec_flag@@@ڠFw@@@@@@@@!8:!8g@@j@.Pstr_primitive_@@@@@((@@k@)Pstr_typeJ(rec_flag@@@֠k^@@@@@@@@+)++)Z@@l@+Pstr_typextK@@@@@ - -@@m@.Pstr_exceptionJ@@@@@..@@,n@+Pstr_module.module_bindingg@@@@@'113(11R@@<o@.Pstr_recmodule@@@@@@@@92km:2k@@Np@,Pstr_modtype9@@@@@F4G4@@[q@)Pstr_open@@@@@T5U57@@ir@*Pstr_classԠ@@@@@@@@g6IKh6Iq@@|s@/Pstr_class_type@@@@@@@@y8z8@@t@,Pstr_include@@@@@::9@@u@.Pstr_attribute@@@@@;OQ;On@@v@.Pstr_extension@@@Ơ@@@@@<<@@w@@@A@@@@@@@@@L@B@0value_constrainte;@@.Pvc_constraint8locally_abstract_univars@@1#loc@@@@@@@@@@@!@@x@#typ@@@@@A"(A"6@@y@@@?B7<@@z@,Pvc_coercion&ground@@@@@@@@߰C=RC=j@@{@(coercion@@@@@ݰC=kC=}@@|@@@C=?C=@@}@@@A@@@@@>@@@@M@B@;@@'pvb_pat@@@@@PP@@$~@(pvb_expr@@@@@QQ@@/@.pvb_constraint@@{@@@@@@+R,R@@@@.pvb_attributes @@@@@6S7S@@K@'pvb_loc @@5!t@@@DTET@@Y@@@A@@@@@HNmmIU@@@@]N@B@*;@@(pmb_name @@#loc/:@@@@@@@@@cYchdYc@@x@(pmb_expr @@U@@@nZoZ@@@.pmb_attributes @@@@@y[z[@@@'pmb_loc@@x!t@@@\\@@@@@A@@@@@WHH]@@@@O@B@/toplevel_phraseh;@@(Ptop_def@@@@@enpen@@@(Ptop_dir2toplevel_directivei@@@@@ff@@@@@A@@@@@dWW@@@@@A@ ;@@)pdir_name@@#loc@@@@@@jj@@@(pdir_arg@@2directive_argumentj@@@@@@kk(@@@(pdir_loc@@!t@@@l)-l)B@@@@@A@@@@@hmCF@@@@@B@;@@*pdira_desc@@7directive_argument_desck@@@qeiqe@@@)pdira_loc@@!t@@@ r r@@!@@@A@@@@@oHHs@@@@%@B@;@@+Pdir_string@@@@@"v#v@@7@(Pdir_int @@@@@@@@@@@:w;w @@O@*Pdir_identO!t@@@@@Jx  Kx (@@_@)Pdir_bool@@@@@Xy)+Yy)>@@m@@@A@@@@@\u@@@@p@B@@RZP)Parsetree0v o[pY Y(Warnings0Ef{&-Stdlib__Uchar0=H^V9>ɠ+Stdlib__Sys0b'8=OIn+Stdlib__Seq0?72#[O.Stdlib__Lexing0^m|e,Stdlib__Lazy0$1mlࠠ.Stdlib__Format00FClW.Stdlib__Either0HD ?|>.Stdlib__Domain0'Ϳo\0m.K.Stdlib__Buffer0,I[?z&Stdlib0t0VoS%{<F:)Longident0wP q;ɡ(Location0nBɊOn?7~ؠ*Format_doc0uy@GmWUࠠ0CamlinternalLazy0zY# #4#-8CamlinternalFormatBasics0|.e1R$|o(Asttypes0eT$BbRM dc@@@Caml1999T037amC)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;@@#intA@@@@@;@A@$charB;@@$charA@@@@@A@A@&stringQ;@@&stringA@@@@@G@@@%bytesC;@@%bytesA@@@@@M@@@%floatD;@@%floatA@@@@@S@@@$boolE;@@%falsec@@]@$trued@@c@@@A@@@@@d@A@$unitF;@@"()e@@n@@@A@@@@@o@A@ #exnG;@@@A@@@@@s@@@#effH;@@O@A@A@@@@@@|@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@@@@%arrayJ;@@R@A%arrayA@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@)nativeintA@@@@@@@@%int32N;@@%int32A@@@@@@@@%int64O;@@%int64A@@@@@@@@&lazy_tP;@@X@A&lazy_tA@Y@@@@@@@@ 5extension_constructorR;@@5extension_constructorA@@@@@@@@*floatarrayS;@@*floatarrayA@@@@@@@@&iarrayT;@@Y@A&iarrayA@Y@@@@@@@@ *atomic_locU;@@Z@A*atomic_locA@@@@@@ @@@ .Assert_failure`#@@@@@J@@@@@@@@[@@A!=ocaml.warn_on_literal_pattern%@&@0Division_by_zero]#@@@A+ . .@+End_of_file\#$@@@A366@'FailureY#,@'@@A<??@0Invalid_argumentX#5@0@@AE$H#H@-Match_failureV#>@@=@9@;@@a@@AV5Y4Y@)Not_foundZ#O@@@A^=a<a@-Out_of_memoryW#W@@@AfEiDi@.Stack_overflow^#_@@@AnMqLq@.Sys_blocked_io_#g@@@AvUyTy@)Sys_error[#o@j@@A^]@:Undefined_recursive_modulea#x@@w@s@u@@h@@Aon@:Continuation_already_takenb#@@@Awv@&Stdlib@Aࠐ(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@@@ y@@@ @@@ @@(_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 8`]c9d@@@@@@@QD@+Pconst_chark@@@ @@Fe Ge5@: Character such as ['c']. Te7UeV@@@@@@@mE@-Pconst_stringl+@@@ !t@@@ Ġ;@@@ @@@ @@sfWYtfW@K Constant string such as ["constant"] or [{delim|other constant|delim}]. The location span the content of the string, without the delimiters. gk7;@@@@@@@F@,Pconst_floatmX@@@ g@@@ !@@@ #@@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@@@@9@@@@@@#8l<@9l<L@@г&stringBl<PCl<V@@`@@г&optionLl<^`@г$charTl<YUl<]@@r@@@sk@@@@.h@@@@@@@A@x@@ðw@A+.location_stackBms ns @@;@@@A!t@@@ @@@ @@@@~s  s 0@@@@H@@@Aг$lists , @г(Locations !s )@s *s +@@@#3@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&string xbr!xbx@@O3@;@@@A@@@@@tq@@c)extensionC;@@@A @@@~@ @@@@xB l lyB l @P  Extension points such as [[%id ARG] and [%%id ARG]]. Sub-language placeholder -- rejected by the typechecker. C  F  @@@@@@@@@J@*attributesC;@@@A @@@@ @@@@H  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@@@@@ot@  As {!package_type} typed values: - [{ppt_path: S; ppt_constraints: []}] represents [(module S)], - [{ppt_path: S; ppt_constraints: [(t1, T1) ; ... ; (tn, Tn)]}] represents [(module S with type t1 = T1 and ... and tn = Tn)]. uuu~@@@@@@@@@O@)row_fieldC;@@@A@@@@@@@@@P@.row_field_descC;@@@A@@@@@ i @@@@Q@,object_fieldC;@@@A@@@@@  !!@@@@R@1object_field_descC;@@@A@@@@@!!!?!X@@@@S@'patternC;@@@A@@@@@!o!o"!"&@c. {2 Patterns} !Z!Z!Z!m@@@@@@@@@-T@,pattern_descC;@@@A@@@@@"("(-../@@@@5U@*expressionC;@@@A@@@@@$1.g.g%7//$@7 {2 Value expressions} 2/.I.I3/.I.e@@@@@@@@@KV@/expression_descC;@@@A@@@@@:9/&/&;DE@@@@SW@$caseC;@@@A@@@@@BEECEuEy@ D Values of type {!case} represents [(P -> E)] or [(P when E0 -> E)] PEzEzQEzE@@@@@@@@@iX@%letopC;@@@A@@@@@XEEYFF"@@@@qY@*binding_opC;@@@A@@@@@`F$F$aFF@@@@yZ@3function_param_descC;@@@A@@@@@hFFiI^I~@@@@[@.function_paramC;@@@A@@@@@pLLqM/M2@@@@\@-function_bodyC;@@@A@@@@@xM4M4yMiM@P G See the comment on {{!expression_desc.Pexp_function}[Pexp_function]}. NNNN@@@@@@@@@]@/type_constraintC;@@@A@@@@@NNO2O]@@@@^@1value_descriptionC;@@@A@@@@@ OOPP@󐠠8 {2 Value descriptions} OOOO@@@@@@| 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"]] PPQQ@@@@@@@@@_@0type_declarationC;@@@A@@@@@QQ'SS@7 {2 Type declarations} QQQQ@@@@@@  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]. (SS@XX@@@@@@@@@`@)type_kindC;@@@A@@@@@BXXGY@Y\@@@@a@1label_declarationC;@@@A@@@@@IY^Y^PZ,Z1@  - [{ ...; 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]}. QZ2Z2Z[[@@@@@@@@@ b@7constructor_declarationC;@@@A@@@@@\[[d\\@@@@c@5constructor_argumentsC;@@@A@@@@@f\\h]=]g@@@@d@.type_extensionC;@@@A@@@@@ w` `  aFaK@䐠 c Definition of new extensions constructors for the extensive sum type [t] ([type t += ...]). aLaLaa@@@@@@@@@3e@5extension_constructorC;@@@A@@@@@"aa#bb@@@@;f@.type_exceptionC;@@@A@@@@@*bb+c2c5@ 0 Definition of a new exception ([exception E]). 8c6c69c6ck@@@@@@@@@Qg@:extension_constructor_kindC;@@@A@@@@@@cmcmAg,gN@@@@Yh@*class_typeC;@@@A@@@@@HggIhh@4 {1 Class language} VggWgg@@@@@@ - {2 Type expressions for the class language} dggegg@@@@@@@@@}i@/class_type_descC;@@@A@@@@@lhhmkkM@@@@j@/class_signatureC;@@@A@@@@@tkjkjukk@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]} kkll@@@@@@@@@k@0class_type_fieldC;@@@A@@@@@llmVm[@@@@l@5class_type_field_descC;@@@A@@@@@m]m]oBoa@@@@m@+class_infosC;@@ @A@A@G@B@@@ototpupz@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. p{p{q@qB@@@@@@@@@n@1class_descriptionC;@@@A @@@@ @@@@qDqDqDqr@@@@o@6class_type_declarationC;@@@A @@@@ @@@@qtqtqtq@@@@p@*class_exprC;@@@A@@@@@qqrnrs@0 . {2 Value expressions for the class language} qqqq@@@@@@@@@q@/class_expr_descC;@@@A@@@@@ruru)ySy@@@@r@/class_structureC;@@@A@@@@@+yy/yy@ɐ 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]} 0yy4zz@@@@@@@@@s@+class_fieldC;@@@A@@@@@6zz;{s{x@@@@ t@0class_field_descC;@@@A@@@@@={z{zep@@@@(u@0class_field_kindC;@@@A@@@@@gi@@@@0v@1class_declarationC;@@@A @@@@ @@@@&k'k3@@@@?w@+module_typeC;@@@A@@@@@.p/u@5 {1 Module language} <m55=m5O@@@@@@ . {2 Type expressions for the module language} JnPPKnP@@@@@@@@@cx@0module_type_descC;@@@A@@@@@Rw!!S@@@@ky@1functor_parameterC;@@@A@@@@@Z[-Y@@@@sz@)signatureC;@@@A @@@@ @@@@ij @@@@{@.signature_itemC;@@@A@@@@@q  rgl@@@@|@3signature_item_descC;@@@A@@@@@ynnz]@@@@}@2module_declarationC;@@@A@@@@@V[@Y 9 Values of type [module_declaration] represents [S : MT] \\\@@@@@@@@@~@3module_substitutionC;@@@A@@@@@X]@o : Values of type [module_substitution] represents [S := M] ^^^@@@@@@@@@@7module_type_declarationC;@@@A@@@@@bg@ 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]. hh&(@@@@@@@@@@@*open_infosC;@@ @A@A@G@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]} 24@@@@@@@@@A@0open_descriptionC;@@@A @@@@ @@@@666g@ T Values of type [open_description] represents: - [open M.N] - [open M(N).O] hh@@@@@@@@@ B@0open_declarationC;@@@A @@@@ @@@@@ڐ p Values of type [open_declaration] represents: - [open M.N] - [open M(N).O] - [open struct ... end] Hf@@@@@@@@@)C@-include_infosC;@@ @A@A@G@B@@@hh@@@@6D@3include_descriptionC;@@@A @@@@ @@@@,-@ > Values of type [include_description] represents [include MT] :;V@@@@@@@@@SE@3include_declarationC;@@@A @@@@ @@@@IXXJX@! > Values of type [include_declaration] represents [include ME] WX@@@@@@@@@pF@/with_constraintC;@@@A@@@@@_`E|@@@@xG@+module_exprC;@@@A@@@@@gh mr@Đ / {2 Value expressions for the module language} uv@@@@@@@@@H@0module_expr_descC;@@@A@@@@@} tt~1P@@@@I@)structureC;@@@A @@@@ @@@@bbb@@@@J@.structure_itemC;@@@A@@@@@@@@@K@3structure_item_descC;@@@A@@@@@<@@@@L@0value_constraintC;@@@A@@@@@>C=@@@@M@-value_bindingC;@@@A@@@@@NmmU@ # [let pat : type_constraint = exp]  UF@@@@@@@@@N@.module_bindingC;@@@A@@@@@WHH]@ < Values of type [module_binding] represents [module X = ME] ^^#@@@@@@@@@O@@A@@@@@@@ @@#y~@@@Ш@г'payloady~y~@@ð@@@@ @@#z@@@Ш@г(Locationzz@zz@@@ܰ@@@@ @ @@A@  @@@@@@+ B l p B l y@@;@@A@#loc@@@ @@@ 堠@D@@@ @@ @@@@@@@@AВ@г 2B l  3B l @г&string ;B l | <B l @@ @@@& @@@г'payload GB l @@$&@@@5'@@Ӡ  Z@@@@@@+Πΰ YH   ZH  %@@;@@Aՠ@@@ @@@ @@@@@@@@@Aг $list mH  2@г)attribute uH  ( vH  1@@U@@@V@@@+ }J 8 < ~J 8 C@@;@@$PStrՐ @@@ @@ K F H K 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 8qp@pp@@@p@p@#ll 7N   8N  @N@гn'pattern AN   BN  @@v!@@гs&option KN  @гw*expression SN   TN  @@3@@@4@@@@|- g{z@zz@@@z@z@@A@@+Ơư fT   gT  @@;@@)ptyp_desc@@@@@  sV   tV  @@ W@(ptyp_loc@@!t@@@  W   W  @@ X@.ptyp_loc_stack@@"@@@  X   X  @@ 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 {@ % [_]  7] o } 8] o @@@@@@@ P[@(Ptyp_varސ @@@ @@ E^   F^  @ > A type variable such as ['a]  S^   T^  @@@@@@@ l\@*Ptyp_arrowߐ )arg_label@@@ @@@@@@@@ l_   m_  @ 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]}.  z`   {g@@@@@@@ ]@*Ptyp_tuple @  ]@@@@@@@@@@@@@@@@@ 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@@@P@@@R :+@@@S@@@U@@ 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萠 [@@@V@@@X Y+closed_flag@@@Y@@ 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@@@Z@@@\ @@@]@@@_@@ ! "'@ [Ptyp_class(tconstr, l)] represents: - [#tconstr] when [l=[]], - [T #tconstr] when [l=[T]], - [(T1, ..., Tn) #tconstr] when [l=[T1 ; ... ; Tn]].  /(. 0 @@@@@@@ Ha@*Ptyp_aliasꐠ@@@` #loc @@@a@@@c@@ H  I 5@ , [T as 'a].  V 7 W H@@@@@@@ ob@,Ptyp_variant될 נ@@@d@@@f +closed_flag@@@g ʠ  %label@@@h@@@j@@@l@@ IK I@ 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"]].   FQ@@@@@@@ c@)Ptyp_poly쐠  #loc m@@@m@@@o@@@q @@@r@@ 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퐠@@@s@@ !# !A@ / [(module S)].  !C !W@@@@@@@ e@)Ptyp_open J#loc+!t@@@t@@@vP@@@w@@ XZ X@ Ȑ) [M.(T)]  X X@@@@@@@ f@.Ptyp_extension@@@x@@ D@ 㐠* [[%id]].   @@@@@@@ 2g@@@A@@@@@U@@@R@# !] o s@@@@  3@@@@@@# 2^   3^  @@г&string <^  @@ @@@@  N@@@@@@# M_   N_  @@г V_   W_  @@ 6@@г)core_type `_   a_  @@ @@@г)core_type j_  @@ I@@@@ B |@@@@@@# {h |h@@г$list h@В@г&option h h@г&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@@г$listyaya@г ,object_field yatya@@( @@@-  @@г%&ya$@@+ %@@@@' )%$@$$@@@$@$@#  ()@@г"#12@г%)Longident<=@,@A@@@4 !@@@: " @@г/$listL#+@г3)core_typeTU"@@; 4@@@@ 56@@@@8 .h65@55@@@5@5@#11g h @@г3)core_typeq r (@@; Q@@г89z 22@г:&string + 1@@B b@@@H c=@@@@? \=<@<<@@@<@<@#88IMIY@@г:$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 \@@@@^ 4\[@[[@@@[@[@#WW3X\4Xe@5@гYZ<Xu=Xx@г\)LongidentGXiHXr@cKXsLXt@@@k ,@@@q - @@гf)core_typeWX{g@@m 6h@@@@j /ihg@gg@@@g@g@#cchi@O@гe)extensionr @@l Q @@@@i Jhg@gg@@@g@g@@A@ @+  @@;@@(ppt_path@@ #loc!t@@@y@@@{@@h@/ppt_constraints@@@#loc!t@@@~@@@@ @@@@@@@@8@@i@'ppt_loc@@ !t@@@9>9R@@j@)ppt_attrs@@ J@@@SXSn@@k@@@A@@@@@  @@ @#RRE@D@@Ш@гUV@гX)Longident@_@@@g հ@@@m ְ @@p@@| @d@#``D@C@@Ш@гc$list3 7@В@гhi"%@гk)Longident @r# $!@@@z @@@  @@@гu)core_type0(11@@} @@@ @@@ 5-@@@@ @~@#zzs<9E@r@@Ш@г}(LocationG9GH9O@K9PL9Q@@@ ,@@@@ /@@#USa@@@Ш@г*attributes^Sc_Sm@@ >@@@@ A@@@A@ 9s  @  @@@ @ @+  rs@@;@@(prf_desc@@ @@@@@l@'prf_loc@@!t@@@@@m@.prf_attributes@@ @@@@@n@@@A@@@@@ @@@ @#''"@!@@Ш@г*.row_field_desc@@2 @@5@@ @1@#--&@%@@Ш@г0(Location@7@@@? @@B@@ @<@#883@2@@Ш@г;*attributes@@C @@F@@ @B@@A@ @+  @@;@@$RtagT#locY%label@@@@@@@@@q b@@@@@@@@+@ې 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) ,2 ^ h@@@@@@@*o@(Rinherit @@@@@ i k 1@+ [[ | t ]] , i - i @@@@@@@Ep@@@A@@@@@ B@@@ ?@#NN45@#@гPQ=>@гSTE F@@Z %@@@` & @@гV$boolPQ@@^ 0@@г[$listZ'W@г_)core_typebc&@@g B@@@l Cb@@@@d<vba@aa@@@a@a@#]]u i mv i u@I@г_)core_type i y @@f ^ @@@@cWba@aa@@@a@a@@A@ @+      @@;@@(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@@@@@!!!!>@@0t@(Oinherit @@@@@%!?!A '@@=u@@@A@@@@@ *@@@ '@#((,!!!-!!%@@г*+5!!/6!!2@г-.=!!)>!!.@@4@@@: @@г0)core_typeH!!51@@7'2@@@@4@#00N!?!CO!?!K@*@г2)core_typeX!?!O Z@@97 [@@@@6@@A@ ]@+ [ [^!o!s_!o!z@@;@@)ppat_desc@@ R@@@k!!l!!@@v@(ppat_loc@@!t@@@y!!z!!@@w@.ppat_loc_stack@@@@@!!!!@@x@/ppat_attributes@@@@@!!!"@i7 [... [\@id1] [\@id2]] !"!" @@@@@@@y@@@A@@@@@  @@ @#AA<!!@;@@Ш@гD,pattern_desc!!!!@@L@@O@@@K@#GG@!!@?@@Ш@гJ(Location!!!!@Q!!!!@@@Y@@\@@@V@#RRM!!@L@@Ш@гU.location_stack!!!!@@]@@`@@@\@#XXS!!@D@@Ш@г[*attributes!!!"@@cͰ@@f@@@b`_@__@@@_@_@@A@    @  @@@ @ @+   "(", "("8@@;@@(Ppat_any@@";"=";"G@2 The pattern [_]. $";"I%";"`@@@@@@@=z@(Ppat_var#loc@@@@@@@@8"a"c9"a"{@ A variable pattern such as [x] F"a"}G"a"@@@@@@@_{@*Ppat_aliasQ@@@#loc'@@@@@@@@_""`""@7 $ An alias pattern such as [P as 'a] m""n""@@@@@@@|@-Ppat_constant@@@@@{""|"#@S @ Patterns such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n] ####c@@@@@@@}@-Ppat_interval@@@à@@@@@#d#f#d#@t Patterns such as ['a'..'z']. Other forms of interval are recognized by the parser but rejected by the type-checker. ###$$@@@@@@@~@*Ppat_tuple+@@@@@@@Ǡ@@@@@@@@@ˠ8+closed_flag@@@@@$%$'$%$l@  [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]. $m$s&v&~@@@@@@@@.Ppat_constructV#loc7!t@@@@@@ϠR@wo#loc@@@@@@@@@Ԡ@@@@@@@@@@@&&&&@ 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)] $ &&%(1(<@@@@@@@=@,Ppat_variant %label@@@٠9@@@@@@@@=(=(?>(=(g@ [Ppat_variant(`A, pat)] represents: - [`A] when [pat] is [None], - [`A P] when [pat] is [Some P] K(h(nL((@@@@@@@d@+Ppat_record ̠@#loc!t@@@@@@ߠ@l@@@@@@@@+closed_flag@@@@@v((w():@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] );)A*}*@@@@@@@@*Ppat_array @@@@@@@@****@o= Pattern [[| P1; ...; Pn |]] ****@@@@@@@@'Ppat_or @@@@@@@@****@3 Pattern [P1 | P2] ***+@@@@@@@@/Ppat_constraint @@@9@@@@@ ++  ++1@3 Pattern [(P : T)]  ++3 ++K@@@@@@@@)Ppat_type\#loc =!t@@@@@@@@!+L+N!+L+l@Ր3 Pattern [#tconst]  !+L+n !+L+@@@@@@@$@)Ppat_lazy@@@@@"++"++@񐠠2 Pattern [lazy P] '"++("++@@@@@@@@@+Ppat_unpack#loc@@@@@@@@@|@@@@@@@@J#++K#++@" Q [Ppat_unpack(s, ptyp)] represents: - [(module P : S)] when [s] is [Some "P"] and [ptyp] is [Some "S"] - [(module _ : S)] when [s] is [None] and [ptyp] is [Some "S"] - [(module P)] when [s] is [Some "P"] and [ptyp] is [None] - [(module _)] when [s] is [None] and [ptyp] is [None] X$++Y)-E-P@@@@@@@q@.Ppat_exceptionc@@@@@f*-Q-Sg*-Q-n@>7 Pattern [exception P] t*-Q-pu*-Q-@@@@@@@@+Ppat_effect@@@@@@@@+--+--@@@.Ppat_extension'@@@@@,--,--@m1 Pattern [[%id]] ,--,-.@@@@@@@@)Ppat_open#loc !t@@@@@@@@@@@-..@1 Pattern [M.(P)] -..1-..G@@@@@@@@@@A@@@@@@@@@#";"?@@@@吠@@@@@@#"a"e"a"m@@г"a"x@г&string"a"q"a"w@@հ@@@ְ@@@@  @@@@@@#"" ""@@г'pattern""""@@@@г ð""@гĠ&string#""$""@@@@@@@@@ɠ7@@@@@@# °6""7"# @@гĠ(constant@"#@@@@@@ȠR@@@@@@#Q#d#hR#d#u@@гà(constant[#d#y\#d#@@;@@гȠ(constante#d#@@D@@@@̠=w@@@@@@#ŠŰv$%$)w$%$3@@гǠ$list$%$Q$%$U@В@г̠&option$%$?$%$E@гѠ&string$%$8$%$>@@v@@@w @@@г֠'pattern$%$H$%$O@@@@@@@@$%$7'@@гݠ(Asttypes$%$X$%$`@$%$a@@@@@@@栰Ȑ@@@@@@#ߠ߰&&&&@@г᠐&&&&@г䠡)Longident&&&&@&&&&@@@@@@ @@г&option&&@В@г$list&&&&@г&&&&@г&string&& &&@@@@@ @@@ @@@г'pattern&&&&@@@@@@@@"&&@@@@+@@@@@@#*(=(A+(=(M@@г3(=(Q4(=(V@@@@г&option=(=(a@г'patternE(=(YF(=(`@@%@@@& @@@@ Y  @  @@@ @ @#X((Y()@@г$listb()(c(),@В@г n()o()@г)Longidenty() z()@}()~()@@@^@@@%_ @@@г'pattern()()&@@"j@@@5k@@@:l() -@@г!"()/ @@'u!@@@@#n! @  @@@ @ @#****@@г$list**@г"'pattern****@@*@@@/%@@@@'͐%$@$$@@@$@$@#  ****@@г"'pattern****@@*@@г''pattern**(@@.)@@@@+򐠠)(@((@@@(@(@#$$ ++  ++@ @г&'pattern ++ ++%@@.۰@@г+)core_type ++(,@@2-@@@@/-,@,,@@@,@,@#((!+L+P!+L+Y@ @г*+!+L+i"@г,)Longident)!+L+]*!+L+f@3-!+L+g.!+L+h@@@;@@@A 4@@@@6B43@33@@@3@3@#//A"++B"++@@г1'patternK"++2@@8*3@@@@5#]32@22@@@2@2@#..\#++]#++@@г01e#++f#++@г3&optionn#++o#++@г8&stringw#++x#++@@@W@@@EX @@@KY@@г=&option#++9@гA,package_type#++#++@@Ik@@@NlD@@@@FeDC@CC@@@C@C@#??*-Q-U*-Q-c@*@гA'pattern*-Q-gB@@HC@@@@ECB@BB@@@B@B@#>>+--+--@2@г@'pattern+--+--@@H@@гE'pattern+--F@@LG@@@@I@#EE,--,--@0@гG)extension,--H@@NI@@@@KIH@HH@@@H@H@#DD-.. -..@#@гFG-.."-..%@гI)Longident-..-..@P-.. -..!@@@X@@@^ @@гS'pattern-..(@@Z@@@@W$VU@UU@@@U@U@@A@@+#1.g.k$1.g.u@@;@@)pexp_desc@@@@@03.~.13.~.@@I@(pexp_loc@@s!t@@@>4..?4..@@W@.pexp_loc_stack@@@@@J5..K5..@@c@/pexp_attributes@@@@@ V6..W6./@.7 [... [\@id1] [\@id2]] d6./e6./@@@@@@@}@@@A@@@@@DA@@3@#AA<l3.~.@;@@Ш@гD/expression_descu3.~.v3.~.@@LU@@O@@X@K@#GG@~4..@?@@Ш@гJ(Location4..4..@Q4..4..@@@Yn@@\@@q@V@#RRM5..@L@@Ш@гU.location_stack5..5..@@]@@`@@@\@#XXS6..@D@@Ш@г[*attributes6..6..@@c@@f@@ @bǐ`_@__@@@_@_@@A@Ґ@@@@@@+9/&/*9/&/9@@;@@*Pexp_identG#loc(!t@@@ @@@@@:/</>:/</]@ , Identifiers such as [x] and [M.x] ;/^/d<//@@@@@@@@-Pexp_constantX@@@@@=//=//@ܐ X Expressions constant such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n] >//?/0@@@@@@@+@(Pexp_let(rec_flag@@@@@@@@@@@@@@0@001@00R@ 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]}. >A0S0Y?F11@@@@@@@W@-Pexp_function@@@@@@@@@@@@@@@@@`G11aH12@8  [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 _]. nI22oV44@@@@@@@@*Pexp_apply[@@@@)arg_label@@@@o@@@@@@@@!@@W44W44@i  [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] X44a6a6l@@@@@@@@*Pexp_match@@@"%w@@@#@@@%@@b6m6ob6m6@ + [match E0 with P1 -> E1 | ... | Pn -> En] c66c66@@@@@@@@(Pexp_try@@@&K@@@'@@@)@@d66d66@ ) [try E0 with P1 -> E1 | ... | Pn -> En] e66e67(@@@@@@@@*Pexp_tuple l@W@@@*@@@,@@@@-@@.@@@0@@ f7)7+f7)7\@吠 \ [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] g7]7cp88@@@@@@@4@.Pexp_construct!#locq!t@@@1@@@3@@@4@@@6@@;q88<q88@ [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])] Ir89Jv99@@@@@@@b@,Pexp_variant"%label@@@7@@@@8@@@:@@bw99cw9:@: [Pexp_variant(`A, exp)] represents - [`A] when [exp] is [None] - [`A E] when [exp] is [Some E] px::%q{::@@@@@@@@+Pexp_record#@#loc!t@@@;@@@=@s@@@>@@?@@@A}@@@B@@@D@@|::|::@w [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] }::;;@@@@@@@@*Pexp_field$@@@E'#loc!t@@@F@@@H@@;;;@/Pexp_ifthenelse'@@@Q@@@R @@@S@@@U@@B<<C<= @9 [if E1 then E2 else E3] P= =Q= =.@@@@@@@i@-Pexp_sequence(=@@@VB@@@W@@c=/=1d=/=[@;* [E1; E2] q=/=]r=/=l@@@@@@@@*Pexp_while)^@@@Xc@@@Y@@=m=o=m=@\7 [while E1 do E2 done] =m==m=@@@@@@@@(Pexp_for*@@@Z@@@[@@@\.direction_flag@@@]@@@^@@===>@ 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]} >> ?:?E@@@@@@@@/Pexp_constraint+@@@_6@@@`@@?F?H?F?s@+ [(E : T)] ?F?u?F?@@@@@@@@+Pexp_coerce,@@@aM[@@@b@@@da@@@e@@????@ِ [Pexp_coerce(E, from, T)] represents - [(E :> T)] when [from] is [None], - [(E : T0 :> T)] when [from] is [Some T0]. ??@_@j@@@@@@@(@)Pexp_send-@@@f#loc%label@@@g@@@i@@)@k@m*@k@@) [E # m] 7@k@8@k@@@@@@@@P@(Pexp_new.#loc!t@@@j@@@l@@M@@N@@@%+ [new M.c] [@@\@@@@@@@@@t@/Pexp_setinstvar/#loc%label@@@m@@@oT@@@p@@u@@v@A@M* [x <- 2] @A@A@@@@@@@@-Pexp_override0@#loc%label@@@q@@@s@@@@t@@u@@@w@@AAAAF@? [{< x1 = E1; ...; xn = En >}] AGAMAGAq@@@@@@@@0Pexp_struct_item12@@@x@@@y@@ArAtArA@/ [let SI in E] AAAA@@@@@@@@+Pexp_assert2@@@z@@AAAA@ j [assert E]. Note: [assert false] is treated in a special way by the type-checker. AAB9BT@@@@@@@ @)Pexp_lazy3@@@{@@BUBWBUBp@ؐ* [lazy E] BUBrBUB@@@@@@@'@)Pexp_poly4@@@|w@@@}@@@@@&BB'BB@ Used for method bodies. Can only be used as the expression under {{!class_field_kind.Cfk_concrete}[Cfk_concrete]} for methods (not values). 4BB5CUCk@@@@@@@M@+Pexp_object5T@@@@@BClCnCClC@2 [object ... end] PClCQClC@@@@@@@i@,Pexp_newtype6#loc,@@@@@@H@@@@@iCCjCC@A5 [fun (type t) -> E] wCCxCC@@@@@@@@)Pexp_pack7!@@@@@@@@@@@CCCD"@g % [(module ME)] or [(module ME : S)]. D#D)D#DS@@@@@@@@*Pexp_letop8V@@@@@DTDVDTDk@ I - [let* P = E0 in E1] - [let* P0 = E00 and* P1 = E01 in E1] DlDrDD@@@@@@@@.Pexp_extension9Y@@@@@DDDD@) [[%id]] DDDD@@@@@@@@0Pexp_unreachable:@@DD@% [.] DEDE@@@@@@@@@@A@@@@@@@@@#:/</@:/</J@@г:/</Z@г)Longident:/</N:/</W@% :/</X :/</Y@@@-@@@3 &@@@@(&%@%%@@@%@%@#!!=//=//@ @г#(constant(=//$@@*%@@@@':%$@$$@@@$@$@#  9@00:@00$@@г"#B@00(C@000@@)"@@г%$listL@00AM@00E@г*-value_bindingU@003V@00@@@25@@@76 @@г/*expression`@00H0@@6?1@@@@38r10@00@@@0@0@#,,qG11rG11@@г.$list{H11|H11@г3.function_paramH11H11@@;d@@@@e @@г8&optionH11H11@г=/type_constraintH11H11@@Ex@@@Jy @@гB-function_bodyH11C@@ID@@@@F{DC@CC@@@C@C@#??W44W44@@гA*expressionW44W44@@I@@гF$listW447@В@гJKW44W44@@Q@@@гM*expressionW44W44@@U@@@a@@@fW44R@@@@TRQ@QQ@@@Q@Q@#MMb6m6qb6m6{@.@гO*expressionb6m6b6m6@@Wݰ@@гT$list b6m6P@гX$case b6m6 b6m6@@`@@@e[@@@@] #[Z@ZZ@@@Z@Z@#VV "d66 #d66@7@гX*expression ,d66 -d66@@` @@г]$list 6d66Y@гa$case >d66 ?d66@@i@@@nd@@@@f Rdc@cc@@@c@c@#__ Qf7)7- Rf7)77@6@гa$list [f7)7XN@В@гe&option gf7)7C hf7)7I@гj&string pf7)7< qf7)7B@@rP@@@wQ @@@гo*expression |f7)7L }f7)7V@@w\@@@]@@@^ f7)7;t@@@@vX ts@ss@@@s@s@#oo q88 q88@H@гqr q88 q88@гt)Longident q88 q88@{ q88 q88@@@@@@ @@г~&option q88z@г*expression q88 q88@@@@@@@@@ ѐ@@@@@@# w99 w9:@`@г w9: w9: @@@@г&option w9:@г*expression w9:  w9:@@˰@@@̰@@@@ @@@@@@# |:: |::@Q@г$list!|::! |::@В@г!|::!|::@г)Longident!|::! |::@!#|::!$|::@@@@@@ @@@г*expression!0|::!1|::@@@@@@@@!5|::-@@г&option!=|::@г*expression!E|::!F|::@@%@@@&@@@@!Y@@@@@@#!X;;!Y;<@@г*expression!b;<!c;<@@B@@г!k;<@г)Longident!u;<!v;<@!y;<!z;<@@@Z@@@[ @@@@T!@@@@@@#!<0<4!<0=/=Q@@@@@@ޠ "P@@@@@@#נװ"O=m=q"P=m={@@г٠*expression"Y=m="Z=m=@@9@@гޠ*expression"c=m=@@B@@@@⠰ ;"u@@@@@@#۠۰"t=="u==@@гݠ'pattern"~=="==@@^@@г⠐*expression"=="==@@h@@г砐*expression"=="==@@r@@г점"=="==@@{@@г*expression"==@@@@@@󠰠 }"@@@@@@#"?F?J"?F?Y@@г*expression"?F?]"?F?g@@@@г)core_type"?F?j@@@@@@ "ܐ@@@@@@#"??"??@@г*expression"??"??@@Ű@@г&option"??"??@г)core_type"??"??@@ذ@@@ ٰ @@г)core_type#??@@@@@@ #@@@@@@##@k@o#@k@x@@г*expression#@k@|#@k@@@@@г#'@k@@г#.@k@#/@k@@@@@@@@@@ !#B@@@@@@##A@@#B@@@@г#J@@@г)Longident#T@@#U@@@#X@@#Y@@@@@9@@@: @@@@!3#m@@@@@@#  #l@@#m@@@@г  #u@@#v@@@г#}@@#~@@@@]@@@^ @@г*expression#@@@@g@@@@!`#@@@@@@##AA#AA%@@г$list#AAB@В@г#AA0#AA3@г#AA*#AA/@@@@@% @@@г*expression#AA6#AA@@@#@@@5@@@:#AA) @@@@"!#ؐ @@@@@@##ArAv#ArA@@г.structure_item#ArA#ArA@@%@@г"*expression#ArA#@@)ʰ$@@@@&!#$#@##@@@#@#@##AA#AA@ @г!*expression$AA"@@(#@@@@%!$#"@""@@@"@"@#$BUBY$BUBb@ @г *expression$!BUBf!@@' "@@@@$!$3"!@!!@@@!@!@#$2BB$3BB@@г*expression$<BB$=BB@@' @@г$&option$FBB @г()core_type$NBB$OBB@@0 .@@@5 /+@@@@-"($b+*@**@@@*@*@#&&$aClCp$bClC{@@г(/class_structure$kClC)@@/ J*@@@@,"C$}*)@))@@@)@)@#%%$|CC$}CC@@г'($CC$CC@г*&string$CC$CC@@2 n@@@8 o @@г/*expression$CC0@@6 x1@@@@3"q$10@00@@@0@0@#,,$CC$CC@ @г.+module_expr$CD$CD @@6 @@г3&option$CD/@г7,package_type$CD$CD@@? @@@D :@@@@<"$ڐ:9@99@@@9@9@#55$DTDX$DTDb@ @г7%letop$DTDf8@@> °9@@@@;"$98@88@@@8@8@#44$DD$DD@@г6)extension$DD7@@= ݰ8@@@@:"%87@77@@@7@7@#33%DD@#@@@4"%!32@22@@@2@2@@A@@+% EE%!EE@@;@@&pc_lhs;@@ *@@@%-E$E)%.E$E9@@%F@(pc_guard<@@$ @@@@@@%>E:E?%?E:E[@@%W@&pc_rhs=@@ )@@@%JE\Ea%KE\Et@@%c@@@A@@@@@  @@@#**%%RE$E/@$@@Ш@г-'pattern%[E$E1%\E$E8@@5!;@@8@@!>@4@#00&%dE:EG@%@@Ш@г3&option%mE:ET%nE:EZ@г8*expression%vE:EI%wE:ES@@@!V@@@E!W @@H@@!Z@?@#;;6%E\Eg@5@@Ш@г>*expression%E\Ei%E\Es@@F!i@@I@@!l@E@@A@ M#d% K J@ J J@@@ J@ J@+ H H%EE%EE@@;@@$let_>@@ M@@@%EE%EE@@%@$ands?@@%) ]@@@@@@%EE%EF@@%@$body@@@ @@@%FF %FF@@%@@@A@@@@@ s@@@ p@#**%%EE@$@@Ш@г-*binding_op%EE%EE@@5!@@8@@!@4@#00&%EE@%@@Ш@г3$list%EF%EF@г8*binding_op%EE%EF@@@!Ӱ@@@E!԰ @@H@@!@?@#;;6%FF@5@@Ш@г>*expression&FF&FF@@F!@@I@@!@E@@A@ @+  &F$F(&F$F2@@;@@'pbop_opA@@$#loc%@@@@@@&"F9F=&#F9FR@@&;@(pbop_patB@@!+@@@&.FSFW&/FSFj@@&G@(pbop_expC@@!@@@&:FkFo&;FkF@@&S@(pbop_locD@@$}!t@@@&HFF&IFF@@&a@@@A@@@@@ @@@ @#99.&PF9FD@-@@Ш@г<=&XF9FN&YF9FQ@г?&string&aF9FG&bF9FM@@G"A@@@M"B @@P@@"E@F@#BB=&kFSF_@<@@Ш@гE'pattern&tFSFb&uFSFi@@M"T@@P@@"W@L@#HHC&}FkFw@B@@Ш@гK*expression&FkFz&FkF@@S"f@@V@@"i@R@#NNG&FF@F@@Ш@гQ(Location&FF&FF@X&FF&FF@@@`"@@c@@"@]@@A@!E@+!C!C&FF&FF@@;@@*Pparam_valE%)arg_label@@@&!@@@@@@!@@@@@&FF&FF@$ \ [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&IYI]@@@@@@@&@.Pparam_newtypeF%J#loc&@@@@@@@@&I^I`!@$ 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&LL@@@@@@@'@@@A@@@@@!@@@!@#NN&FF&FF@)@гPQ'FF'FF@@W"@@гS&option'FF'FF@гX*expression'FF'FF@@`"@@@e" @@г]'pattern'%FF^@@d#_@@@@a$'7_^@^^@@@^@^@#ZZ'6I^Ib'7I^Ip@@@г\]'?I^I{!@г^&string'GI^It'HI^Iz@@f#'@@@l#(!@@@@c%!'[ba@aa@@@a@a@@A@!@+!!'ZLL'[LL@@;@@*pparam_locG@@%!t@@@'iLL'jLM@@'@+pparam_descH@@"@@@'uMM 'vMM.@@'@@@A@@@@@" @@@"@#'}LL@@@Ш@г(Location'LL'LM@%'LM'LM@@@-#m@@0@@#p@*@#&&!'MM@ @@Ш@г)3function_param_desc'MM'MM-@@1#@@4@@#@0@@A@"5@+"3"3'M4M8'M4ME@@;@@.Pfunction_bodyI"@@@@@'MHMJ'MHMh@@'@/Pfunction_casesJ'8"@@@@@@Š&!t@@@Ơ#K@@@@@'MiMk"^@%  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. 'MM'NN@@@@@@@'@@@A@@@@@"o"l@@"^@#;;'MHML'MHMZ@4@г=*expression'MHM^>@@D#԰?@@@@A@#=='MiMm'MiM|@@г?$list(MiM(MiM@гD$case(MiM(MiM@@L#@@@Q# @@гI(Location(MiM(MiM@P(MiM( MiM@@@X$@@гS*attributes(*MiM"@@Z$ "@@@@W&(<VU@UU@@@U@U@@A@"& (G""@""@@@"@"@+""(FNO(GNO@@;@@+PconstraintK#@@@@@(UOO(VOO1@@(n@'PcoerceL'#@@@@@@ˠ#@@@@@(mO2O4"@&D G See the comment on {{!expression_desc.Pexp_function}[Pexp_function]}. (zO^O^({O^O@@@@@@@(@@@A@@@@@"@@@"@#44(OO(OO$@-@г6)core_type(OO(7@@=$k8@@@@:@#66(O2O6(O2O=@@г8&option(O2OK(O2OQ@г=)core_type(O2OA(O2OJ@@E$@@@J$ @@гB)core_type(O2OT#"@@I$##@@@@F&(ED@DD@@@D@D@@A@#0@+#.#.( OO( OO@@;@@)pval_nameM@@'5#loc(@@@@@@ϰ( OO( OP@@(@)pval_typeN@@$@@@@Ұ( PP ( PP@@(@)pval_primO@@(_(@@@@@@װ(P P%(P P<@@) @/pval_attributesP@@$r@@@ڰ(P=PB(P=P^@&Ր; [... [\@\@id1] [\@\@id2]] ) P=P`) P=P@@@@@@@)$@(pval_locQ@@'N!t@@@ݰ)PP)PP@@)2@@@A@@@@@##@@#h@#XXM)! OO@L@@Ш@г[\)) OP)* OP@г^&string)2 OO)3 OO@@f%@@@l% @@o@@%@e@#aa\)< PP@[@@Ш@гd)core_type)E PP)F PP@@l%%@@o@@%(@k@#gg])NP P.@\@@Ш@гj$list)WP P7)XP P;@гo&string)`P P0)aP P6@@w%@@@@|%A @@@@%D@v@#rrm)jP=PQ@^@@Ш@гu*attributes)sP=PS)tP=P]@@}%S@@@@%V@|'N)zy@yy@@@y@y@#uun)PP@m@@Ш@гx(Location)PP)PP@)PP)PP@@@%w@@@@%z@@@A@$))$$@$$@@@$@$'})$$@$$@@@$@$@+##)QQ)QQ@@;@@*ptype_nameR@@(*#loc)@@@@@@)QQ)QQ@@)@,ptype_paramsS@@)H@%=@@@蠠@@(N(variance@@@頠@(U+injectivity@@@@@@@@@@)RR)RR?@'Ȑ2 [('a1,...'an) t] )R@RF)R@R]@@@@@@@*@1ptype_constraintsT@@)}@%r@@@@%x@@@@(U!t@@@@@@@@*! R^Rc*" R^R@' 0 [... constraint T1=T1' ... constraint Tn=Tn'] */!RR*0!RR@@@@@@@*H@*ptype_kindU@@$`@@@*;"RR*<"RR@@*T@-ptype_privateV@@(,private_flag@@@*H#RR*I#RS@( 5 for [= private ...] *V#RS*W#RS6@@@@@@@*o@.ptype_manifestW@@)%@@@@@@*g$S7S<*h$S7S]@(?2 represents [= T] *u$S7S_*v$S7Sv@@@@@@@*@0ptype_attributesX@@%@@@*%SwS|*%SwS@(Y; [... [\@\@id1] [\@\@id2]] *%SwS*%SwS@@@@@@@*@)ptype_locY@@(!t@@@*&SS*&SS@@*@@@A@@@@@$$@@$@#*QQ@@@Ш@гꠐ*QQ*QQ@г&string*QQ*QQ@@&@@@& @@@@&@@#*RR@@@Ш@г$list*RR:*RR>@В@г)core_type*RR*RR@@&@@@В@г*RR!*RR)@@&İ@@@г*RR,*RR7@@&ΰ@@@&ϰ@@@&а*RR8@@@$&Ұ*RR,@@(@@&@ (+@@@@@@#+ R^Rt@@@Ш@г$list+ R^R+ R^R@В@г )core_type+ R^Rw+ R^R@@&@@@г)core_type+( R^R+) R^R@@'@@@г(Location+5 R^R+6 R^R@+9 R^R+: R^R@@@#'@@@4'!@@@9'+? R^Rv/@@=@@' @")+R @@@@@@#+Q"RR@@@Ш@г)type_kind+Z"RR+["RR@@&':@@)@@'=@%@#!!+c#RS @ @@Ш@г$%+k#RS +l#RS@@+'K@@.@@'N@))F+'&@&&@@@&@&@#""+$S7SJ@ @@Ш@г%&option+$S7SV+$S7S\@г*)core_type+$S7SL+$S7SU@@2'q@@@7'r @@:@@'u@1)m+/.@..@@@.@.@#**%+%SwS@@@Ш@г-*attributes+%SwS+%SwS@@5'@@8@@'@4)+Đ21@11@@@1@1@#--&+&SS@%@@Ш@г0(Location+&SS+&SS@7+&SS+&SS@@@?'@@B@@'@<@@A@&++萠&&@&&@@@&@&)+󐠠&&@&&@@@&@&@+&&+BXX+BXX@@;@@.Ptype_abstractZ@@+CXX+CXX@@,@-Ptype_variant[+}&@@@ @@@@@,DXX,DXX@@,(@,Ptype_record\+&>@@@@@@@@,"EXX,#EXY@); Invariant: non-empty list ,0EXY,1EXY0@@@@@@@,I@*Ptype_open]@@,9FY1Y3,:FY1Y?@@,R@.Ptype_external^,@@@@@,GGY@YB&i@@,_@@@A@@@@@&l@@@&i@#TT,NCXXR@Q@@@U@#QQ,TDXX,UDXX@E@гS$list,^DXXO@гW7constructor_declaration,fDXX,gDXX@@_(F@@@d(GZ@@@@\@#XX,nEXX,oEXX@>@гZ$list,xEXY V@г^1label_declaration,EXX,EXY @@f(`@@@k(aa@@@@c*Z,a`@``@@@`@`@#\\,FY1Y5Z@Y@@@]@#YY,GY@YD,GY@YR@S@г[&string,GY@YV&@@b(&@@@@_@@A@&@+&Ơ&ư,IY^Yb,IY^Ys@@;@@(pld_name_@@+#loc,@@@@@@,KY|Y,KY|Y@@,@+pld_mutable`@@+/,mutable_flag@@@,LYY,LYY@@,@(pld_typea@@(5@@@,MYY,MYY@@,@'pld_locb@@+!t@@@,NYY,NYY@@,@.pld_attributesc@@(d@@@",OYY,OYZ @*ǐ9 [l : T [\@id1] [\@id2]] ,OYZ ,OYZ+@@@@@@@-@@@A@@@@@''@@' @#TTI-KY|Y@H@@Ш@гWX- KY|Y-KY|Y@гZ&string-KY|Y-KY|Y@@b(@@@h( @@k@@(@a@#]]W- LYY@V@@Ш@г`a-(LYY-)LYY@@g)@@j@@) @e@#aa\-1MYY@[@@Ш@гd)core_type-:MYY-;MYY@@l)@@o@@)@k@#gg`-CNYY@_@@Ш@гj(Location-NNYY-ONYY@q-RNYY-SNYY@@@y)3@@|@@ )6@v@#rrm-\OYY@^@@Ш@гu*attributes-eOYZ-fOYZ @@})E@@@@#)H@|+@-zzy@yy@@@y@y@@A@'+K-''@''@@@'@'@+''-\[[-\[\@@;@@(pcd_named@@+#loc-_@@@(@@@*-^\\-^\\3@@-@(pcd_varse@@-,#loc-u@@@-@@@/@@@1-_\4\9-_\4\S@@-@(pcd_argsf@@'@@@4-`\T\Y-`\T\y@@-@'pcd_resg@@-)*@@@7@@@9-a\z\-a\z\@@-@'pcd_loch@@,!t@@@<-b\\-b\\@@-@.pcd_attributesi@@)Z@@@?-c\\-c\\@+< [C of ... [\@id1] [\@id2]] -c\\-c\\@@@@@@@. @@@A@@@@@'@@@'@#ood-^\\&@c@@Ш@гrs.^\\/.^\\2@гu&string. ^\\(. ^\\.@@})@@@) @@@@+)@|@#xxh._\4\A@g@@Ш@г{$list._\4\N. _\4\R@г.'_\4\J.(_\4\M@г&string.0_\4\C.1_\4\I@@*@@@* @@@*@@@@2*@@#.;`\T\a@@@Ш@г5constructor_arguments.D`\T\c.E`\T\x@@*$@@@@5*'@@#.Ma\z\@@@Ш@г&option.Va\z\.Wa\z\@г)core_type._a\z\.`a\z\@@*?@@@*@ @@@@:*C@@#.ib\\@@@Ш@г(Location.tb\\.ub\\@.xb\\.yb\\@@@*Y@@@@=*\@@#.c\\@@@Ш@г*attributes.c\\.c\\@@*k@@@@@*n@,f.@@@@@@@A@(@+((.f\].f\]@@;@@+Pcstr_tuplej.!*@@@E@@@G@@.g]].g]]<@@.@,Pcstr_recordk.4(@@@H@@@J@@.h]=]?(@,  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 [...]]. .i]h]n.u` ` @@@@@@@.@@@A@@@@@(@@@(@#44.g]].g]]*@(@г6$list.g]]82@г:)core_type.g]]..g]]7@@B*Ͱ@@@G*ΰ=@@@@?@#;;.h]=]A.h]=]M@"@г=$list.h]=]c(@гA1label_declaration/h]=]Q/h]=]b@@I*@@@N*)@@@@F,/ED@DD@@@D@D@@A@)@+))/w` `/w` `@@;@@+ptyext_pathl@@-#loc#o!t@@@K@@@M//y`(`-/0y`(`J@@/H@-ptyext_paramsm@@.@*@@@P@@-(variance@@@Q@-+injectivity@@@R@@S@@T@@@V/Vz`K`P/Wz`K`@@/o@3ptyext_constructorsn@@.ՠ)G@@@Y@@@[/g{``/h{``@@/@.ptyext_privateo@@-,private_flag@@@^/t|``/u|``@@/@*ptyext_locp@@-!t@@@a/}``/}`a@@/@1ptyext_attributesq@@+@@@d/~aa/~aa%@-f9 ... [\@\@id1] [\@\@id2] /~aa'/~aaE@@@@@@@/@@@A@@@@@))@@)@#u/y`(`8@t@@Ш@г/y`(`F/y`(`I@г)Longident/y`(`:/y`(`C@/y`(`D/y`(`E@@@+@@@+ @@@@N+@@#p/z`K`]@o@@Ш@г$list/z`K`/z`K`@В@г)core_type/z`K``/z`K`i@@+@@@В@г/z`K`m/z`K`u@@+ʰ@@@г/z`K`x/z`K`@@+԰@@@+հ@@@+ְ/z`K`@@@+ذ/z`K`_,@@@@W+@@#0{``@@@Ш@г$list0 {``0 {``@г5extension_constructor0{``0{``@@+@@@+ @@@@\+@@#0|``@@@Ш@г0&|``0'|``@@,@@@@_, @@#0/}``@@@Ш@г(Location0:}``0;}``@0>}``0?}`a@@@,@@@@b,"@@#0H~aa@@@Ш@г *attributes0Q~aa0R~aa$@@,1@@@@e,4@ɠ.,0f@@@@@@@A@*V.70q*T*S@*S*S@@@*S@*S@+*Q*Q0paa0qaa@@;@@)pext_namer@@.#loc0K@@@j@@@l0aa0aa@@0@)pext_kinds@@*R@@@o0aa0ab@@0@(pext_loct@@.!t@@@r0b b%0b b:@@0@/pext_attributesu@@,@@@u0b;b@0b;b\@.< [C of ... [\@id1] [\@id2]] 0b;b^0b;b@@@@@@@0@@@A@@@@@*@@@*@#GG<0aa@;@@Ш@гJK0aa0aa@гM&string0aa0aa@@U,@@@[, @@^@@m,@T@#PPK0ab@J@@Ш@гS:extension_constructor_kind0ab0ab@@[,ð@@^@@p,@Z@#VVO0b b-@N@@Ш@гY(Location0b b/0b b7@`0b b80b b9@@@h,ܰ@@k@@s,@e@#aa\1b;bO@M@@Ш@гd*attributes1b;bQ1b;b[@@l,@@o@@v,@k.1#ih@hh@@@h@h@@A@*@+**1"bb1#bb@@;@@2ptyexn_constructorv@@+@@@{1/bb10bb@@1H@*ptyexn_locw@@/r!t@@@~1=bb1>bb@@1V@1ptyexn_attributesx@@,@@@1Ibb1Jbc@/!; [... [\@\@id1] [\@\@id2]] 1Wbc1Xbc1@@@@@@@1p@@@A@@@@@+1+.@@+ @#5501_bb@/@@Ш@г85extension_constructor1hbb1ibb@@@-H@@C@@|-K@?@#;;41qbb@3@@Ш@г>(Location1|bb1}bb@E1bb1bb@@@M-a@@P@@-d@J@#FFA1bc@2@@Ш@гI*attributes1bc1bc@@Q-s@@T@@-v@P/n1NM@MM@@@M@M@@A@+z/y1+x+w@+w+w@@@+w@+w@++u+u1cmcq1cmc@@;@@)Pext_decly140,#loc1@@@@@@@@@+@@@1,-:@@@@@@@@1cc1cc@/ 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].}} 1cc1g"g+@@@@@@@2@+Pext_rebindz0^#loc&?!t@@@@@@@@1g,g.+@/֐ F [Pext_rebind(D)] re-export the constructor [D] with the new name [C] 2 gOgQ2 gOg@@@@@@@2%@@@A@@@@@+@@@+@#ZZ2cc2cc@+@г\$list2cc2cc@гab2&cc2'cc@гd&string2/cc20cc@@l.@@@r. @@@w.@@гi5constructor_arguments2;cc2<cc@@q.@@гn&option2Eccj@гr)core_type2Mcc2Ncc@@z.-@@@..u@@@@w0'2aut@tt@@@t@t@#pp2`g,g02ag,g;@T@гrs2ig,gK,)@гt)Longident2sg,g?2tg,gH@{2wg,gI2xg,gJ@@@.X@@@.Y ,;@@@@~0R2}|@||@@@|@|@@A@,H@+,F,F2gg2gg@@;@@)pcty_desc{@@,/@@@2hh2hh#@@2@(pcty_loc|@@0!t@@@2h$h)2h$h>@@2@/pcty_attributes}@@.'@@@2h?hD2h?h`@07 [... [\@id1] [\@id2]] 2h?hb2h?h~@@@@@@@2@@@A@@@@@,|,y@@,]@#5502hh@/@@Ш@г8/class_type_desc2hh2hh"@@@.@@C@@.@?@#;;42h$h1@3@@Ш@г>(Location2h$h32h$h;@E2h$h<2h$h=@@@M.ʰ@@P@@.@J@#FFA2h?hS@2@@Ш@гI*attributes2h?hU2h?h_@@Q.ܰ@@T@@.@P03NM@MM@@@M@M@@A@,Š33,,@,,@@@,@, 3(3',,@,,@@@,@,@+,,3&hh3'hh@@;@@+Pcty_constr~1#loc'}!t@@@@@@2.@@@@@@@@3Ghh3Hhh@1 ) - [c] - [['a1, ..., 'an] c] 3Uhh3Vhi@@@@@@@3n@.Pcty_signature,@@@@@3cii3dii*@1;2 [object ... end] 3qii,3riiC@@@@@@@3@*Pcty_arrow1)arg_label@@@.@@@-E@@@@@3iDiF3iDix@1b 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]}. 3iyi3jj@@@@@@@3@.Pcty_extension/8@@@@@3jj3jk@1~' [%id] 3jk3jk@@@@@@@3@)Pcty_open+@@@-@@@@@3kk!-[@14 [let open M in CT] 3kkO3kkh@@@@@@@3@@@A@@@@@-l@@@-i@#3hh3hh@@г3hh3hh@г)Longident3hh3hh@3hh3hh@@@/հ@@@/ְ @@г$list4hh@г)core_type4hh4 hh@@/@@@/@@@@Ơ14@@@@@@#4ii 4ii@@г/class_signature4%ii@@0@@@@Š147@@@@@@#46iDiH47iDiR@@г4?iDiV4@iDi_@@0@@гà)core_type4IiDib4JiDik@@0)@@гȠ*class_type4SiDin@@02@@@@̠2+4e@@@@@@#ŠŰ4djj4ejk@@гǠ)extension4njk@@0M@@@@ˠ2F4@@@@@@#Ġİ4kk#4kk,@@гƠ0open_description4kk04kk@@@0i@@гˠ*class_type4kkC.'@@0r.(@@@@Ϡ2k4@@@@@@@A@.5@+.3.34kjkn4kjk}@@;@@*pcsig_self@@0@@@4kk4kk@@4@,pcsig_fields@@40.:@@@@@@4kk4kk@@4@@@A@@@@@.R.O@@.A@#4kk@@@Ш@г!)core_type4kk4kk@@)0@@,@@0@(@#$$4kk@@@Ш@г'$list4kk4kk@г,0class_type_field4kk4kk@@40ΰ@@@90ϰ @@<@@0@3@@A@.25..~@.~.~@@@.~@.~@+.|.|5ll5ll@@;@@)pctf_desc@@.@@@5ll5ll@@5)@(pctf_loc@@3S!t@@@5ll5lm@@57@/pctf_attributes@@0@@@5*mm5+mm3@3; [... [\@\@id1] [\@\@id2]] 58mm559mmU@@@@@@@5Q@@@A@@@@@.@@@.@#5505@ll@/@@Ш@г85class_type_field_desc5Ill5Jll@@@1)@@C@@1,@?@#;;45Rlm@3@@Ш@г>(Location5]lm5^lm@E5alm5blm@@@M1B@@P@@1E@J@#FFA5kmm&@2@@Ш@гI*attributes5tmm(5umm2@@Q1T@@T@@1W@P3O5NM@MM@@@M@M@@A@.@+..5m]ma5m]mv@@;@@,Pctf_inherit/R@@@@@5mym{5mym@3o. [inherit CT] 5mym5mym@@@@@@@5@(Pctf_val@4#loc4#%label@@@@@@@4+,mutable_flag@@@@42,virtual_flag@@@@12@@@@@@@5mm5mm@3, [val x: T] 5mm5mn @@@@@@@5@+Pctf_method@4Y#loc4^%label@@@@@@@4f,private_flag@@@ @4m,virtual_flag@@@à@1m@@@@@@@6 n n 6n nS@3吠 a [method x: T] Note: [T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}. 6nTnZ6nn@@@@@@@64@/Pctf_constraint@1@@@Ơ@1@@@@@@@63nn64nn@4 6 [constraint T1 = T2] 6Ann6Bno @@@@@@@6Z@.Pctf_attribute2@@@@@6Oo o6Po o,@4'. [[\@\@\@id]] 6]o o.6^o oA@@@@@@@6v@.Pctf_extension1@@@@@6koBoD/@4B* [[%%id]] 6xoBoc6yoBor@@@@@@@6@@@A@@@@@/@@@/@#6mym}6mym@@г*class_type6mym@@2i@@@@4b6@@@@@@#6mm6mm@@В@г6mm6mm@г6mm6mm@@2@@@2 @@@г6mm6mm@@2@@@г6mm6mm@@2@@@г)core_type6mm6mm@@2@@@%2$@@@@46䐠@@@@@@#6n n6n n@@В@г6n n%6n n(@г6n n6n n$@@2ذ@@@2ٰ @@@г7n n+7n n7@@ 2@@@г7 n n:7n nF@@2@@@г )core_type7n nI7n nR@@2@@@22$@@@@47, @  @@@ @ @#  7+nn7,nn@@В@г )core_type79nn7:nn@@3@@@г)core_type7Dnn7Enn@@3$@@@#3%@@@@57X@@@@@@#7Wo o7Xo o@@г)attribute7ao o#@@3@@@@@597s@@@@@@#7roBoF7soBoT@@г)extension7|oBoX0@@3[0@@@@5T7@@@@@@@A@0@+007oto{7oto@А!a@3u7otox7otoz@@BA@; @A(pci_virt@@6,virtual_flag@@@̰7oo7oo@@7@*pci_params@@7'@3@@@Ϡ@@6-(variance@@@Р@64+injectivity@@@@@@@@@@հ7oo7oo@@7@(pci_name@@6B#loc7@@@@@@ڰ7oo7op@@7@(pci_expr@@VD@ݰ7pp 7pp@@8 @'pci_loc@@6.!t@@@7pp7pp1@@8 @.pci_attributes@@3z@@@8p2p78p2pR@5ݐ; [... [\@\@id1] [\@\@id2]] 8p2pT8p2pt@@@@@@@8, @@@A@Y@@@@@1z1w@@1i@#{{u8oo@t@@Ш@г~8%oo8&oo@@4@@@@4@@#_8.oo@^@@Ш@г$list87oo88oo@В@г)core_type8Doo8Eoo@@4$@@@В@г8Roo8Soo@@42@@@г8\oo8]oo@@4<@@@4=@@@4>8aoo@@@4@8coo,@@@@4D@@#8joo@@@Ш@г8rop8sop@г&string8{oo8|oo@@4[@@@4\ @@@@4_@@#8pp@@@Ш@А!a4i8pp8pp@@@@4n@@#8pp$@@@Ш@г(Location8pp&8pp.@8pp/8pp0@@@4@@@@4@@#8p2pE@@@Ш@г*attributes8p2pG8p2pQ@@4@@@@4@68ː@@@@@@@A@2(68֐2&2%@2%2%@@@2%@2%@+2#2#8qDqH8qDqY@@;@@5hA2G2@@@@@@@@@@2'@@@2$@@Aг +class_infos8qDqg2-@г*class_type8qDq\8qDqf@@4Ѱ@@@4Ұ28@@2:@+28288qtqx8qtq@@;@@5A2k2@@@@@@@@@@2<@@@29@@Aг +class_infos9 qtq2B@г*class_type9qtq9qtq@@4@@@42M@@2O@+2M2M9qq9qq@@;@@(pcl_desc@@2D@@@9*qq9+qr@@9C @'pcl_loc@@7m!t@@@98rr99rr.@@9Q @.pcl_attributes@@4@@@9Dr/r49Er/rO@77 [... [\@id1] [\@id2]] 9Rr/rQ9Sr/rm@@@@@@@9k@@@A@@@@@22@@2r@#5509Zqr@/@@Ш@г8/class_expr_desc9cqr9dqr@@@5C@@C@@5F@?@#;;49lrr!@3@@Ш@г>(Location9wrr#9xrr+@E9{rr,9|rr-@@@M5\@@P@@5_@J@#FFA9r/rB@2@@Ш@гI*attributes9r/rD9r/rN@@Q5n@@T@@5q@P7i9NM@MM@@@M@M@@A@2̠9922@22@@@2@2@+2Ǡ2ǰ9rury9rur@@;@@*Pcl_constr8##loc.!t@@@@@@9<5-@@@@@@@@9rr9rr@7= [c] and [['a1, ..., 'an] c] 9rr9rr@@@@@@@9@-Pcl_structure2@@@@@9rr9rs @72 [object ... end] 9rs 9rs$@@@@@@@:@'Pcl_fun8m)arg_label@@@9b4@@@@@@5@@@3K@@@@@: s%s': s%sh@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]. :) siso:*vv@@@@@@@:B@)Pcl_apply3g@@@9@8)arg_label@@@@5*@@@@@@@@@@:Lvv:MvvT@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] :ZvUv[:[wAwK@@@@@@@:s@'Pcl_let8(rec_flag@@@ 91@@@ @@@ 3@@@ @@:x wLwN:y wLw@8P 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]}. :!ww:&xx@@@@@@@:@.Pcl_constraint3@@@4T@@@@@:'xx:'xy@8q- [(CE : CT)] :'xy:'xy#@@@@@@@:@-Pcl_extension6G@@@@@:(y$y&:(y$yB@8) [[%id]] :(y$yD:(y$yR@@@@@@@:@(Pcl_open2@@@4@@@@@:)ySyU3@84 [let open M in CE] :)ySy:)ySy@@@@@@@:@@@A@@@@@3@@@3@#66:rr:rr@@г89:rr:rr@г;)Longident:rr;rr@B;rr;rr@@@J6@@@P6 @@гE$list;rrA@гI)core_type;rr;rr@@Q6@@@V6L@@@@N8;+LK@KK@@@K@K@#GG;*rr;+rr@2@гI/class_structure;4rrJ@@P7K@@@@M9 ;FKJ@JJ@@@J@J@#FF;E s%s);F s%s0@@гHI;N s%s4;O s%s=@@O7.@@гK&option;X s%sK;Y s%sQ@гP*expression;a s%s@;b s%sJ@@X7A@@@]7B @@гU'pattern;l s%sT;m s%s[@@]7L@@гZ*class_expr;v s%s^[@@a7U\@@@@^9N;\[@[[@@@[@[@#WW;vv;vv&@-@гY*class_expr;vv*;vv4@@a7q@@г^$list;vvPO@В@гbc;vv8;vvA@@i7@@@гe*expression;vvD;vvN@@m7@@@y7@@@~7;vv7j@@@@l9;ǐji@ii@@@i@i@#ee; wLwP; wLwW@@@гgh; wLw[; wLwc@@n7@@гj$list; wLwt; wLwx@гo-value_binding; wLwf; wLws@@w7°@@@|7ð @@гt*class_expr; wLw{u@@{7̰v@@@@x9;vu@uu@@@u@u@#qq;'xx;'xx@W@гs*class_expr<'xx< 'xy@@{7@@гx*class_type<'xyy@@7z@@@@|9<$zy@yy@@@y@y@#uu<#(y$y(<$(y$y5@`@гw)extension<-(y$y9x@@~8 y@@@@{:)ySyW(Location=9{{$=9{{,@E= 9{{-=!9{{.@@@M9@@P@@9@J@#FFA=*:{0{C@2@@Ш@гI*attributes=3:{0{E=4:{0{O@@Q9@@T@@"9@P;=HNM@MM@@@M@M@@A@6=@+6;6;=G={z{~=H={z{@@;@@+Pcf_inherit;-override_flag@@@$6@@@%<;#loc=3@@@&@@@(@@@*@@=l>{{=m>{{@;D { [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] =z?{{={L~U~Y@@@@@@@=@'Pcf_val@;#loc;%label@@@+@@@-@<,mutable_flag@@@.@6@@@/@@0@@=M~Z~\=M~Z~@;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)]} =N~~=[@@@@@@@=@*Pcf_method@<'#loc<,%label@@@1@@@3@<4,private_flag@@@4@6@@@5@@6@@=\=\@; - [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]}) =]=a@@@@@@@=@.Pcf_constraint@9T@@@7@9Z@@@8@@9@@=b=b@;Ґ6 [constraint T1 = T2] >b> b@@@@@@@>!@/Pcf_initializer8@@@:@@>c>c#@;1 [initializer E] >$c%>%c;@@@@@@@>= @-Pcf_attribute:n@@@;@@>2d<>>3d<Z@< . [[\@\@\@id]] >@d<\>Ad<o@@@@@@@>Y!@-Pcf_extension9@@@<@@>Nepr7?@<%* [[%%id]] >[ep>\ep@@@@@@@>t"@@@A@@@@@7P@@@7M@#>c>{{>d>{{@@г>l>{{>m>{{@@:L@@г*class_expr>v>{{>w>{{@@!:V@@г&option>>{{@г"#>>{{>>{{@г%&string>>{{>>{{@@-:p@@@3:q @@@8:r(@@@@*('@''@@@'@'@###>M~Z~^>M~Z~e@@В@г%&>M~Z~p>M~Z~s@г()>M~Z~j>M~Z~o@@/:@@@5: @@@г+,>M~Z~v>M~Z~@@2:@@@г.0class_field_kind>M~Z~>M~Z~@@6:@@@O:@@@@4<>㐠21@11@@@1@1@#-->\>\@@В@г/0>\>\@г23>\>\@@9:װ@@@?:ذ @@@г56?\?\@@<:@@@г80class_field_kind? \?\@@@:@@@Y:@@@@><?!<;@;;@@@;@;@#77? b?!b@@В@г9)core_type?.b?/b@@A;@@@г>)core_type?9b?:b@@F;@@@Q;@@@@D=?MBA@AA@@@A@A@#==?Lc?Mc@(@г?*expression?Vc@@@F;5A@@@@C=.?hA@@@@@@@@@@@#<<?gd<@?hd<M@'@г>)attribute?qd<Q?@@E;P@@@@@B=I?@?@??@@@?@?@#;;?ept?ep@'@г=)extension?ep8}@@D;k8~@@@@A=d?@?@??@@@?@?@@A@8@+88?g?g@@;@@+Cfk_virtual; @@@=@@?h?h@@?#@,Cfk_concrete>!-override_flag@@@>:@@@?@@?i8@@?$@@@A@@@@@8@@@8@#""?h?h@@г$)core_type?h%@@+;&@@@@(@#$$?i?i@@г&'?i?i@@-;@@г)*expression?i8@@0;ɰ8@@@@-@@A@8@+8Ԡ8԰?k ?k@@;@@d!t@@@F@/s@0s@@@H&@/pmty_attributes@@;@@@I@;t@<t@>7 [... [\@id1] [\@id2]] @It@Jt@@@@@@@@b'@@@A@@@@@99@@9@#550@Qr@/@@Ш@г80module_type_desc@Zr@[r@@@<:@@C@@D<=@?@#;;4@cs@3@@Ш@г>(Location@ns@os@E@rs@ss@@@M`@NM@MM@@@M@M@@A@9h@@9f9e@9e9e@@@9e@9e@@9c9b@9b9b@@@9b@9b@+9`9`@w!%@w!5@@;@@*Pmty_ident?%#loc5!t@@@L@@@N@@@x8:@x8Y@> [Pmty_ident(S)] represents [S] @x8[@x8@@@@@@@@(@.Pmty_signature9@@@O@@@y@y@>/ [sig ... end] @y@y@@@@@@@A )@,Pmty_functor9@@@P9@@@Q@@AzAz@>ې; [functor(X : MT1) -> MT2] A{A{@@@@@@@A**@)Pmty_with9@@@R@8@@@S@@@U@@A)|A*|E@?/ [MT with ...] A7|GA8|[@@@@@@@AP+@+Pmty_typeof8@@@V@@AE}\^AF}\z@?5 [module type of ME] AS}\|AT}\@@@@@@@Al,@.Pmty_extension<@@@W@@Aa~Ab~@?9) [[%id]] Ao~Ap~@@@@@@@A-@*Pmty_alias?#loc5!t@@@X@@@Z@@A:3@?\. [(module M)] AA@@@@@@@A.@@@A@@@@@:D@@@:A@#Ax8<Ax8F@@г堐Ax8V@г砡)LongidentAx8JAx8S@Ax8TAx8U@@@=@@@= @@@@񠰠?AƐ@@@@@@#AyAy@@г점)signatureAy@@=@@@@𠰠?Aᐠ@@@@@@#AzAz@@г렐1functor_parameterAzAz@@=ʰ@@г+module_typeAz@@=Ӱ@@@@?B@@@@@@#B|B|@@г+module_typeB|#B|.@@=@@г$listB|A@г/with_constraintB!|1B"|@@@>@@@>@@@@?B5@@@@@@#B4}\`B5}\k@@г+module_exprB>}\o@@>@@@@@BP@@@@@@#BO~BP~@@г)extensionBY~@@>8@@@@@1Bk@@@@@@#BjBk@@гBs;!@г)LongidentB}B~@BB@@@>b@@@ >c ;3@@@@@\B@@@@@@@A@;@@+;>;>BB@@;@@$Unit@@BB@@w& [()] B!B,@@@@@@@B/@%NamedA"#locBB@@@[@@@]@@@_;@@@`@@B-/;q@@ [Named(name, MT)] represents: - [(X : MT)] when [name] is [Some X], - [(_ : MT)] when [name] is [None] BZ`B@@@@@@@B0@@@A@@@@@;@@@;@#CCBA@2@@@D@B򐠠BA@AA@@@A@A@#==B-1B-6@@г?@B-HB-K@гB&optionC-AC-G@гG&stringC -:C -@@@O>@@@T> @@@Z>@@гL+module_typeC-N;@@S>;@@@@P@C*ON@NN@@@N@N@@A@;@+;ʠ;ʰC)C*@@;@@?AB;@@@a@@@c@@@@;@@@;@@Aг $listC=;@г.signature_itemCECF@@?%@@@?&;@@;@+;ߠ;߰CM CN @@;@@)psig_desc@@;@@@dCZ',C['K@@Cs1@(psig_loc@@A!t@@@gChLQCiLf@@C2@@@A@@@@@;@@@;@#Cp'5@@@Ш@г3signature_item_descCy'7Cz'J@@&?Y@@)@@e?\@%@#!!CLY@@@Ш@г$(LocationCL[CLc@+CLdCLe@@@3?r@@6@@h?u@0@@A@<'@+<%<%CnrCn@@;@@*Psig_value>@@@j@@CC@A E - [val x: T] - [external x: T = "s1" ... "sn"] CC@@@@@@@C3@)Psig_typeB-(rec_flag@@@kC?>@@@l@@@n@@CC.@A ' [type t1 = ... and ... and tn = ...] C/5C/a@@@@@@@C4@.Psig_typesubstC`>:@@@o@@@q@@CbdCb@Aʐ ) [type t1 := ... and ... and tn := ...] DD@@@@@@@D5@+Psig_typext>@@@r@@DD@A搠2 [type t1 += ...] DD@@@@@@@D56@.Psig_exception>@@@s@@D*D+"@B4 [exception C of T] D8$D9=@@@@@@@DQ7@+Psig_module<@@@t@@DF>@DG>c@B $ [module X = M] and [module X : MT] DT>eDU>@@@@@@@Dm8@-Psig_modsubst<@@@u@@DbDc@B:1 [module X := M] DpDq@@@@@@@D9@.Psig_recmoduleC=@@@v@@@x@@DD@B[ , [module rec X1 : MT1 and ... and Xn : MTn] DD5@@@@@@@D:@,Psig_modtypeÐ<@@@y@@D68D6a@Bw * [module type S = MT] and [module type S] DbhDb@@@@@@@D;@1Psig_modtypesubstĐ=@@@z@@DD@B: [module type S := ...] DD@@@@@@@D<@)Psig_openŐ<@@@{@@DD@B* [open X] DD!@@@@@@@D=@,Psig_includeƐ<@@@|@@D"$D"I@Bː. [include MT] E"KE"^@@@@@@@E>@*Psig_classǐD>a@@@}@@@@@E_aE_@B쐠 ' [class c1 : ... and ... and cn : ...] E"E#@@@@@@@E;?@/Psig_class_typeȐD>s@@@@@@@@E5E6@C . [class type ct1 = ... and ... and ctn = ...] ECED'@@@@@@@E\@@.Psig_attributeɐA@@@@@EQ(*ER(G@C). [[\@\@\@id]] E_(IE`(\@@@@@@@ExA@.Psig_extensionʐ@@@@@@@@@@Er]_=@CI* [[%%id]] E]E]@@@@@@@EB@@@A@@@@@> @@@>@#EE@@г栐1value_descriptionE@@Ap@@@@꠰CiE@@@@@@#EE @@г堐EE@@A@@г蠐$listE*@г점0type_declarationEE)@@A@@@A@@@@񠰠CEѐ@@@@@@#EbfEbt@@г점$listEb@г0type_declarationEbxEb@@A°@@@Að@@@@CE@@@@@@#EE@@г.type_extensionE@@Aް@@@@CF@@@@@@#FF@@г.type_exceptionF@@A@@@@󠰠CF,@@@@@@#F+>BF,>M@@г2module_declarationF5>Q@@B@@@@򠰠D FG@@@@@@#FFFG@@г3module_substitutionFP@@B/@@@@񠰠D(Fb@@@@@@#FaFb@@г점$listFk@г2module_declarationFsFt@@BS@@@BT@@@@DMF@@@@@@#F6:F6F@@г7module_type_declarationF6J@@Bo@@@@DhF@@@@@@#FF@@г7module_type_declarationF@@B@@@@󠰠DF@@@@@@#FF@@г0open_descriptionF@@B@@@@򠰠DFؐ@@@@@@#F"&F"2@@г3include_descriptionF"6@@B@@@@񠰠DF󐠠@@@@@@#F_cF_m@@г점$listF_@г1class_descriptionG_qG_@@B@@@B@@@@DG@@@@@@#GG@@г$listG!@г6class_type_declarationG)G*@@C @@@C @@@@EG=@@@@@@#G<(,G=(:@@г)attributeGF(>@@C%@@@@EGX@@@@@@#GW]aGX]o@@г)extensionGa]sGb]|@@CA@@г*attributesGk]?@@CJ?@@@@ECG}@@@@@@@A@@@+??G|G}@@;@@(pmd_name@@E#locFG[@@@@@@@@@GG@@GC@(pmd_type@@@u@@@GG@@GD@.pmd_attributes@@C!@@@GG@E; [... [\@\@id1] [\@\@id2]] GG;@@@@@@@GE@'pmd_loc@@E!t@@@G<AG<U@@GF@@@A@@@@@@K@H@@@:@#LL<G@;@@Ш@гOPGG@гR&optionGG@гW&stringGG@@_Cʰ@@@dC˰ @@@jC̰@@m@@C@^@#ZZUG@T@@Ш@г]+module_typeGG@@eCް@@h@@C@d@#``[H @L@@Ш@гc*attributesHH@@kC@@n@@C@jEH%hg@gg@@@g@g@#cc\H$<H@[@@Ш@гf(LocationH/<JH0<R@mH3<SH4<T@@@uD@@x@@D@r@@A@@FHI@@@@@@@@@@@@+@@HHHI@@;@@(pms_name@@F#locH#@@@@@@H[H\@@HtG@,pms_manifest@@F#locCH>W@@HJ@@@A@@@@@AA@@@@#OODH@C@@Ш@гRSHH@гU&stringHH@@]D@@@cD @@f@@D@\@#XXKH@J@@Ш@г[\HH@г^)LongidentHH@eHH@@@mD@@@sD @@v@@D@j@#ffaH@R@@Ш@гi*attributesHH@@qDŰ@@t@@D@pFHnm@mm@@@m@m@#iibH>J@a@@Ш@гl(LocationI>LI>T@sI>UI >V@@@{D@@~@@D@x@@A@AxFIAvAu@AuAu@@@Au@Au@+AsAsII@@;@@)pmtd_name@@G#locH@@@@@@I0I1@@IIK@)pmtd_type@@HB@@@@@@IAIB@@IZL@/pmtd_attributes@@D@@@IMIN$@G%; [... [\@\@id1] [\@\@id2]] I[&I\F@@@@@@@ItM@(pmtd_loc@@G!t@@@IiGLIjGa@@IN@@@A@@@@@AA@@A@#LLAIq@@@@Ш@гOPIyIz@гR&stringII@@ZEb@@@`Ec @@c@@Ef@Y@#UUKI@J@@Ш@гX&optionII@г]+module_typeII@@eE~@@@jE @@m@@E@d@#``[I@L@@Ш@гc*attributesII#@@kE@@n@@E@jGIƐhg@gg@@@g@g@#cc\IGT@[@@Ш@гf(LocationIGVIG^@mIG_IG`@@@uE@@x@@E@r@@A@B.GIꐠB,B+@B+B+@@@B+@B+@+B)B)I*1I*;@А!a@EѰI*.I*0@@\@;@A*popen_expr@@D@JDIJDX@@JO@.popen_override@@Hs-override_flag@@@İJ Y^JY|@@J&P@)popen_loc@@HP!t@@@ǰJ}J}@@J4Q@0popen_attributes@@E@@@ʰJ'J(@@J@R@@@A@Y@@@@@BeBb@@BT@#441J1DS@0@@Ш@А!a:FJ8DUJ9DW@@?@@F@=@#993J@Yl@2@@Ш@г<=JHYnJIY{@@CF(@@F@@F+@A@#==6JQ}@5@@Ш@г@(LocationJ\}J]}@GJ`}Ja}@@@OFA@@R@@FD@L@#HHCJj@B@@Ш@гK*attributesJsJt@@SFS@@V@@FV@R@@A@BHNJBB@BB@@@B@B@+BBJ6:J6J@@;@@GABРH#loc>!t@@@@@@@@@@@@@BB@@B@@Aг*open_infosJ6]B@гJ6YJ6\@г)LongidentJ6MJ6V@ J6WJ6X@@@(F@@@.F @@@3F B@@B۠HJϐBB@BB@@@B@B@+B֠BְJJ@@;@@GaACBw@@@@@@@@@@BB@@B@@Aг *open_infosJB@г+module_exprJJ@@Fʰ@@@F˰B@@BHJBB@BB@@@B@B@+BBJhoJh|@А!a@FKhlK hn@@p@;@A)pincl_mod@@D@ְKK@@K-S@)pincl_loc@@IW!t@@@ڰK"K#@@K;T@0pincl_attributes@@F@@@ݰK.K/@@KGU@@@A@Y@@@@@C@@@C@#''$K8@#@@Ш@А!a-GK?K@@@2@@G!@0@#,,%KG@$@@Ш@г/(LocationKRKS@6KVKW@@@>G7@@A@@G:@;@#772K`@1@@Ш@г:*attributesKiKj@@BGI@@E@@GL@A@@A@CR@+CPCPKrKs@@;@@HACfDT@@@@@@@@@@CTCQ@@CC@@Aг -include_infosKCZ@г+module_typeKK@@Gn@@@GoCe@@CgIhKCeCd@CdCd@@@Cd@Cd@+CbCbKX\KXo@@;@@H4ACCJ@@@@@@@@@@CfCc@@CU@@Aг -include_infosKX~Cl@г+module_exprKXrKX}@@G@@@GCw@@CyIKѐCwCv@CvCv@@@Cv@Cv@+CtCtKK@@;@@*Pwith_typeސJF#loc@'!t@@@@@@F5@@@@@KK@IĐ [with type X.t = ...] Note: the last component of the longident must match the name of the type_declaration. K"K~@@@@@@@LV@,Pwith_moduleߐJo#loc@P!t@@@@@@J|#loc@]!t@@@@@@@@LL@I7 [with module X.Y = Z] L+L,@@@@@@@LDW@-Pwith_modtypeJ#loc@!t@@@@@@E@@@@@LF LG:@J< [with module type X.Y = Z] LT;ALU;b@@@@@@@LmX@2Pwith_modtypesubstᐠJ#loc@!t@@@@@@ED@@@@@LoceLpc@JG # [with module type X.Y := sig end] L}L~@@@@@@@LY@/Pwith_typesubst␠J#loc@!t@@@@@@F@@@@@LL@Jp 5 [with type X.t := ..., same format as [Pwith_type]] L LD@@@@@@@LZ@.Pwith_modsubst㐠K#loc@!t@@@@@@K(#locA !t@@@@@@@@LEGDj@J8 [with module X.Y := Z] L}L}@@@@@@@L[@@@A@@@@@D{@@@Dx@#LL@@г LL@г )LongidentLL@LL@@@Hװ@@@ Hذ @@г0type_declarationM @@H@@@@JM@@@@@@#MM@@гMM@г)LongidentM'M(@M+M,@@@&I @@@,I  @@г!"M6@г#)LongidentM@MA@*MDME@@@2I%@@@8I& +@@@@-KMY+*@**@@@*@*@#&&MX MY@@г()Ma)Mb,@г+)LongidentMlMm&@2Mp'Mq(@@@:IQ@@@@IR @@г5+module_typeM|/6@@<I[7@@@@9KTM76@66@@@6@6@#22McgMcy@@г45McMc@г7)LongidentMc}Mc@>McMc@@@FI@@@LI @@гA+module_typeMcB@@HIC@@@@EKMÐCB@BB@@@B@B@#>>MM@@г@AMM@гC)LongidentMM@JMM@@@RI@@@XI @@гM0type_declarationMN@@TIŰO@@@@QKMON@NN@@@N@N@#JJMEIMEW@!@гLMNEgNEj@гO)LongidentN E[N Ed@VNEeNEf@@@^I@@@dI @@гYZNEyE@г[)LongidentN$EmN%Ev@bN(EwN)Ex@@@jJ @@@pJ  E@@@@eLN=dc@cc@@@c@c@@A@E@+EؠEذN<N=@@;@@)pmod_desc@@E@@@NINJ@@Nb\@(pmod_loc@@L!t@@@NWNX,@@Np]@/pmod_attributes@@I@@@Nc -2Nd -N@L;7 [... [\@id1] [\@id2]] Nq -PNr -l@@@@@@@N^@@@A@@@@@FF @@E@#550Ny@/@@Ш@г80module_expr_descNN@@@Jb@@C@@Je@?@#;;4N@3@@Ш@г>(LocationN!N)@EN*N+@@@MJ{@@P@@J~@J@#FFAN -A@2@@Ш@гI*attributesN -CN -M@@QJ@@T@@ J@PLNNM@MM@@@M@M@@A@FWNN͐FUFT@FTFT@@@FT@FT@+FRFRN txN t@@;@@*Pmod_ident琠MB#locC#!t@@@ @@@ @@N N @L% [X] N N @@@@@@@O _@.Pmod_structure萠F}@@@@@NO@Lא2 [struct ... end] O O@@@@@@@O&`@,Pmod_functor鐠G@@@F@@@@@O O!%@L: [functor(X : MT1) -> ME] O.&,O/&K@@@@@@@OGa@*Pmod_applyꐠF@@@F@@@@@OALNOBLw@M, [ME1(ME2)] OOLxOPL@@@@@@@Ohb@/Pmod_apply_unit될F@@@@@O]O^@M5) [ME1()] OkOl@@@@@@@Oc@/Pmod_constraint쐠G@@@HS@@@@@O~O@MV- [(ME : MT)] OO@@@@@@@Od@+Pmod_unpack퐠Jy@@@@@OO@Mr+ [(val E)] O O0@@@@@@@Oe@.Pmod_extensionKH@@@@@O13G9@M) [[%id]] O1RO1`@@@@@@@Of@@@A@@@@@GJ@@@GG@#O O @@гO @г)LongidentO O @O O @@@ Kð@@@Kİ @@@@MO@@@@@@#OO@@г)structureP@@K߰@@@@MP@@@@@@#PP@@г1functor_parameterPP@@K@@г+module_exprP%@@ L@@@@MP7@@@@@@#P6LPP7LZ@@г+module_exprP@L^PALi@@ L @@г+module_exprPJLl @@L) @@@@ N"P\  @  @@@ @ @#P[P\@@г+module_exprPe@@LD @@@@ N=Pw @@@@@@#PvPw@@г+module_exprPP@@L`@@г +module_typeP @@Li @@@@NbP  @  @@@ @ @#PP@@г *expressionP @@L @@@@N}P  @  @@@ @ @#P15P1C@@г )extensionP1GHC@@LHD@@@@ NPҐ  @  @@@ @ @@A@HQ@+HOHOPbfPbo@@;@@MdAPMHM@@@@@@@@@@HS@@@HP@@Aг $listPbHY@г.structure_itemPbrPb@@LͰ@@@LΰHd@@Hf@+HdHdPP@@;@@)pstr_desc@@Hi@@@QQ@@Qg@(pstr_loc@@OE!t@@@QQ@@Q)h@@@A@@@@@H@@@H}@#Q@@@Ш@г3structure_item_descQ!Q"@@&M@@)@@M@%@#!!Q*@@@Ш@г$(LocationQ5Q6@+Q9Q:@@@3M@@6@@M@0@@A@H@+HHQCQD@@;@@)Pstr_evalL1@@@!L@@@"@@QW QX +@O/% [E] Qe -Qf 7@@@@@@@Q~i@*Pstr_valueO(rec_flag@@@#PH@@@$@@@&@@Q~!8:Q!8g@OV 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]}. Q"hnQ'@@@@@@@Qj@.Pstr_primitiveL@@@'@@Q(Q(@Or < - [val x: T] - [external x: T = "s1" ... "sn" ]Q)Q*(@@@@@@@Qk@)Pstr_typeP(rec_flag@@@(Q/L @@@)@@@+@@Q+)+Q+)Z@O & [type t1 = ... and ... and tn = ...] Q,[aQ,[@@@@@@@Ql@+Pstr_typextK@@@,@@Q-Q-@O2 [type t1 += ...] Q-Q-@@@@@@@Rm@.Pstr_exceptionK@@@-@@Q.Q.@Oѐ 8 - [exception C of T] - [exception C = M.X] R/R0 0@@@@@@@R n@+Pstr_moduleIW@@@.@@R113R11R@O퐠1 [module X = ME] R#11TR$11j@@@@@@@R<o@.Pstr_recmoduleQIw@@@/@@@1@@R62kmR72k@P , [module rec X1 = ME1 and ... and Xn = MEn] RD3RE3@@@@@@@R]p@,Pstr_modtypeJ@@@2@@RR4RS4@P*6 [module type S = MT] R`4Ra4@@@@@@@Ryq@)Pstr_openJv@@@3@@Rn5Ro57@PF* [open X] R|59R}5H@@@@@@@Rr@*Pstr_classQKr@@@4@@@6@@R6IKR6Iq@Pg ' [class c1 = ... and ... and cn = ...] R7rxR7r@@@@@@@Rs@/Pstr_class_typeRK@@@7@@@9@@R8R8@P . [class type ct1 = ... and ... and ctn = ...] R9R9@@@@@@@Rt@,Pstr_includeJ@@@:@@R:R:9@P. [include ME] R:;R:N@@@@@@@Ru@.Pstr_attributeO$@@@;@@R;OQR;On@P. [[\@\@\@id]] R;OpR;O@@@@@@@Sv@.Pstr_extensionN@@@<N~@@@=@@S <Jm@P* [[%%id]] S<S<@@@@@@@S/w@@@A@@@@@J~@@@J{@#ӠӰS S @@гՠ*expressionS( S) @@O@@гڠ*attributesS2 !@@O@@@@ޠQ SD@@@@@@#נװSC!8<SD!8F@@г٠ڰSL!8JSM!8R@@O,@@гܠ$listSV!8c@гࠐ-value_bindingS^!8US_!8b@@O>@@@O?@@@@堰Q8Sr@@@@@@#ޠްSq(Sr(@@гࠐ1value_descriptionS{(@@OZ@@@@䠰QSS@@@@@@#ݠݰS+)-S+)6@@гߠS+):S+)B@@Ou@@г⠐$listS+)V@г栐0type_declarationS+)ES+)U@@O@@@O@@@@렰QS@@@@@@#S-S-@@г栐.type_extensionS-@@O@@@@꠰QS֐@@@@@@#S.S.@@г堐.type_exceptionS.@@O@@@@頰QS񐠠@@@@@@#S115S11@@@г䠐.module_bindingS11D@@Oٰ@@@@蠰QT @@@@@@#T 2koT 2k}@@г㠐$listT2k@г砐.module_bindingT2kT2k@@O@@@O@@@@젰QT1@@@@@@#T04T14@@г砐7module_type_declarationT:4@@P@@@@렰RTL@@@@@@#TK5TL5#@@г栐0open_declarationTU5'@@P4@@@@꠰R-Tg@@@@@@#Tf6IMTg6IW@@г堐$listTp6Im@г預1class_declarationTx6I[Ty6Il@@PX@@@PY@@@@RRT@@@@@@#T8T8@@г預$listT8@г6class_type_declarationT8T8@@P}@@@P~@@@@򠰠RwT@@@@@@#T:T:"@@г3include_declarationT:&@@P@@@@񠰠RT̐@@@@@@#T;OST;Oa@@г점)attributeT;Oe@@P@@@@𠰠RT琠@@@@@@#T<T<@@г렐)extensionT<T<@@Pа@@г*attributesT<L^@@PٰL_@@@@RU @@@@@@@A@Ll@+LjLjU >U >@@;@@.Pvc_constraint8locally_abstract_univars@@TS#locT@@@>@@@@@@@BU(@U)@!@@UAx@#typ@@P@@@EU4A"(U5A"6@@UMy@@@U8?U9B7<@@UQz@,Pvc_coercion&ground@@TP@@@H@@@JUNC=RUOC=j@@Ug{@(coercion@@P@@@MUZC=kU[C=}@@Us|@@@U^C=?L@S5  - [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] UkDUlLgk@@@@@@@U}@@@A@@@@@L@@@L@#``Us?Ut?@;@#bbRUz@@Q@@Ш@гe$listU@U@ @гjkU@U@@гm&stringU@U@@@uQt@@@{Qu @@@Qv@@@@CQy@t@#ppkUA"+@j@@Ш@гs)core_typeUA",UA"5@@{Q@@~@@FQ@z@@@v@#rrUC=AUC=M@F@#ttjUC=X@i@@Ш@гw&optionUC=cUC=i@г|)core_typeUC=YUC=b@@Q@@@Q @@@@KQ@@#zUC=s@y@@Ш@г)core_typeUC=t@@Q@@@@NQ@@@@SU񐠠@@@@@@@A@MI@+MGMGUNmqUNm~@@;@@'pvb_pat@@P@@@PUPUP@@V~@(pvb_expr@@P@@@SV QV Q@@V"@.pvb_constraint@@UkMx@@@V@@@XVRVR@@V3@.pvb_attributes @@Q@@@[V&SV'S@@V?@'pvb_loc @@Ti!t@@@^V4TV5T@@VM@@@A@@@@@MM@@M|@#DD?V<P@>@@Ш@гG'patternVEPVFP@@OR%@@R@@QR(@N@#JJEVNQ@D@@Ш@гM*expressionVWQVXQ@@UR7@@X@@TR:@T@#PPFV`R@E@@Ш@гS&optionViRVjR@гX0value_constraintVrRVsR@@`RR@@@eRS @@h@@YRV@_@#[[VV|S@U@@Ш@г^*attributesVSVS@@fRe@@i@@\Rh@e@#aaZVT @Y@@Ш@гd(LocationVTVT@kVTVT@@@sR~@@v@@_R@p@@A@MTyVMM@MM@@@M@M@+MMVWHLVWHZ@@;@@(pmb_name @@U&#locVV@@@a@@@c@@@eVYchVYc@@V@(pmb_expr @@Nr@@@hVZVZ@@V@.pmb_attributes @@RW@@@kV[V[@@V@'pmb_loc@@U%!t@@@nV\V\@@W @@@A@@@@@N3N0@@N"@#>>.VYcp@-@@Ш@гABWYcWYc@гD&optionW YcyW Yc@гI&stringWYcrWYcx@@QR@@@VR @@@\R@@_@@fR@P@#LLGWZ@F@@Ш@гO+module_exprW&ZW'Z@@WS@@Z@@iS @V@#RRMW/[@L@@Ш@гU*attributesW8[W9[@@]S@@`@@lS@\@#XXQWA\@P@@Ш@г[(LocationWL\WM\@bWP\WQ\@@@jS1@@m@@oS4@g@@A@NU,WfNN@NN@@@N@N@@SSiN@WuWt. {1 Toplevel} Wq`%%Wr`%8@@@@@@3WpWoWoWpWpWpWpWp@SNOOO$vO,O;OCOY }Oa O~ O GO O O 2O PP)qP?=PGPOlP^Pf$Pn PPPPrPPVP PPQ Q& Q."1Q6"QL#QT$Qx%.Q&Q&Q'IQ(Q)Q*5Q+Q+R.R*.R2/sRH0RP0_RX1R`1Rh2R~2R=R>RDRE[RERF)RFRGGRH6RLSMSSN<S2N`SONSS@AKWW͐6 {2 Toplevel phrases} Wb::Wb:U@@@@@@YA+/toplevel_phraseDWdW\WdWk@@;@@(Ptop_defOb@@@U@@WenpWen@@W@(Ptop_dir2toplevel_directiveD@@@V@@WfWf@U̐5 [#use], [#load] ... XfXf@@@@@@@X@@@A@@@@@XdWW@@@@X@@#00X enrXenz@)@г2)structureXen~3@@93XXXXXXXX@L;@@@A@@@@@@@@/;@@@A@@@@@X"hX#mCF@@@@X;@2directive_argumentD;@@@A@@@@@X*oHHX+s@@@@XC@7directive_argument_descD;@@@A@@@@@X2uX3y)>@@@@XK@@AQ@@@@S@#OOX:fX;f@8@гQ2toplevel_directiveXDfP@@X-Q@@@@SVXVQP@PP@@@P@P@@A@L@+ccXUhXVh@@;@@)pdir_name@@V#locX0@@@W@@@YXhjXij@@X@(pdir_arg@@WʠQ@@@\@@@^XykXzk(@@X@(pdir_loc@@V!t@@@aXl)-Xl)B@@X@@@A@@@@@i@@@f@#22'Xj@&@@Ш@г56XjXj@г8&stringXjXj@@@@@@F @@I@@Z@?@#;;1Xk @0@@Ш@г>&optionXk!Xk'@гC2directive_argumentXkXk @@K@@@P @@S@@_@J@#FF?Xl)5@>@@Ш@гI(LocationXl)7Xl)?@PXl)@Xl)A@@@X@@[@@b@U@@A@@+XoHLXoH^@@;@@*pdira_desc@@@@@gXqeiXqe@@Y@)pdira_loc@@W/!t@@@jXrXr@@Y@@@A@@@@@@@@@#Yqes@@@Ш@г7directive_argument_descY qeuY qe@@&@@)@@h@%@#!!Yr@@@Ш@г$(LocationYrY r@+Y#rY$r@@@3@@6@@k@0@@A@@+Y-uY.u@@;@@+Pdir_stringY@@@m@@Y<vY=v@@YU@(Pdir_intY@@@nXY"@@@o@@@q@@YTwYUw @@Ym@*Pdir_identM!t@@@r@@Ydx  Yex (@@Y}@)Pdir_boolY)@@@s@@Yry)+@@@Y@@@A@@@@@C@@@@@#DDYyvYzv@=@гF&stringYvG@@MlH@@@@J@#FFYwYw@5@гH&stringYwYw@@P}@@гM&optionYwI@гQ$charYwYw@@Y@@@^T@@@@V@#RRYx Yx @I@гT)LongidentYx Yx &@[Yx 'Y@Z@@b[@@@@]@#YYYy)-Yy)6@S@г[$boolYy):@@b@@@@_@@A@@@]@@X)X#A@XWB@VnVhA@VVA@UoPB@UTPB@UP`B@UCOyB@U NB@UJ`B@UIsB@UI B@THYB@TGB@TGB@TFB@T@B@T@"B@T4B@T4ZB@T3B@T3SB@T2B@T2WB@Tz1B@Tt1BB@TR0OB@T0.B@T*-`B@T,B@T+nB@T *B@S)B@S(B@S(cB@S'B@S&B@S%wB@S%B@S$B@S"B@Su!NB@Sh!,B@S[! B@SG |B@SAB@S-kB@S'B@S!B@SCB@S!B@RB@RB@RB@RB@RB@RB@RB@R(B@RSB@RrB@RW}B@R<EB@R1B@RB@QB@Q B@Q B@Q B@Q fB@Q B@QTB@QqB@QB@A@yB@FB@@>B@@3ZjZiZiZjZjZjZjZj@ECM@A@ H************************************************************************ZvA@@ZwA@L@ H Z|BMMZ}BM@ H OCaml ZCZC@ H ZDZD3@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt ZE44ZE4@ H ZFZF@ H Copyright 1996 Institut National de Recherche en Informatique et ZGZG@ H en Automatique. ZHZHg@ H ZIhhZIh@ H All rights reserved. This file is distributed under the terms of ZJZJ@ H the GNU Lesser General Public License version 2.1, with the ZKZKN@ 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 X;* 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. XR * 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. X07* {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. VY 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 P4* {1 Core language} V97* {2 Type expressions} V.8* [... [\@id1] [\@id2]] PJ&* [_] 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]}. O 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]. OS * [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]}. O * [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"]]. N * ['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}. NV0* [(module S)]. N=** [M.(T)] N+* [[%id]]. M * As {!package_type} typed values: - [{ppt_path: S; ppt_constraints: []}] represents [(module S)], - [{ppt_path: S; ppt_constraints: [(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) J ,* [[ | t ]] I/* {2 Patterns} V8* [... [\@id1] [\@id2]] H3* The pattern [_]. H !* 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. G * [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]. GX 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)] G * [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] F4* Pattern [(P : T)] Fd4* Pattern [#tconst] FC3* Pattern [lazy P] F* R* [Ppat_unpack(s, ptyp)] represents: - [(module P : S)] when [s] is [Some "P"] and [ptyp] is [Some "S"] - [(module _ : S)] when [s] is [None] and [ptyp] is [Some "S"] - [(module P)] when [s] is [Some "P"] and [ptyp] is [None] - [(module _)] when [s] is [None] and [ptyp] is [None] E8* Pattern [exception P] E㠠6 Pattern [effect P P] [Z+--[[+--@2* Pattern [[%id]] E2* Pattern [M.(P)] E8* {2 Value expressions} V48* [... [\@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)] V ]* [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]}. VX 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"]] V88* {2 Type declarations} V%3* [('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]}. V=* [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} UŠ8* [... [\@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} UY /* {2 Type expressions for the module language} UN8* [... [\@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] UM<* [... [\@\@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] U 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]] S/home/teraram/ci/builds/workspace/parallel-build/flambda/true/label/ocaml-manycores >10/.-,+*)('&%$#"! @@0UymI:6?5q3]]]]]]]]@]@@\50eT$BbRM dc8CamlinternalFormatBasics0|.e1R$|o0CamlinternalLazy0zY# #4#-*Format_doc0uy@GmWUࠠ(Location0nBɊOn?7~ؠP0wP q;ɡ^0v o[pY Y&Stdlib0t0VoS%{<F:.Stdlib__Buffer0,I[?z.Stdlib__Domain0'Ϳo\0m.K.Stdlib__Either0HD ?|>.Stdlib__Format00FClW,Stdlib__Lazy0$1mlࠠ.Stdlib__Lexing0^m|e+Stdlib__Seq0?72#[O+Stdlib__Sys0b'8=OIn-Stdlib__Uchar0=H^V9>ɠ(Warnings0Ef{&@0v o[pY YA  ?@~@W)0++[++o@9%Xݒ8@2;1HEIG@#"}55@J`GѰ[[l@@@@324 2KЕK@ð.. @C4>@!!X@Uǒ @ U E2)1@X}2o@@/R!ޕ!@W%n,W, @00@@2j@VVVW`!.(V'**@UɰX{0@  O@WU@@@$#Y@EDܰNN@@@&&[@~@43TTYU@@TT\@@('-V-(32@@W'@YM@A@;`@.-8e8(YLIQOA@!ȕ!@K:H@  lVq?8e8$A;ڰ\] @R&P$@$ۓ#ҰY5@Y7799a@@Tz@@@Ft224@@qaZ8Uz@gS6W6E@+>LPL RO@IΓF@1ޕ1KHO N@@$#@%%d@,,ٰ22\@++@ ד Vr)LRL@SY('@:(Z;T@%ӕ%++*@NhN;OHO S+QP@@GD˓?@\\@@X})MZM-@!1 7$n#747"[[@*Y*EYER@ܓ"*!9\9,@':&E@@X*@Wc@@43JiGiK Hp@@  +ē+ C=q@W@  6LxWL@SǓQ@A;] \@)(@<YY8ZF0@@++@1^0@@K.-Ӱ8c8)@88cBy<@@$#B0 /9A9@ o @@ ̓ P @Y5@M.(DAg;d\ѓ\E@KXd@@@''@@@@Y2@ߓɰ" !*@WG2•2q:`:AC>=@@@:G:C"=oTT@  axNB<5@ e 0M{MW@@@}@ } -A66_@&u&GOOyUU@0L/6Օ6@#G#4@Nd22TRH@W+@Wj&W̰6687@  W/@8d8V@..v/.Ұ54ҰE6@'@5ە5D?P@NNn@! ~@1.1 @@ 3@2P1@  R@Z}8@*ߕ*A8;Ca=FFdNZN>@88i@WY.Q[yV@''Z@z@@8)(5z4i@Q ('@ӓ%$CP=@@MMv@J A˓;UUI@A;[;O@@"u!F/A8@  Ͱ  UUpUU@SvQU@͓Yϒ-BC@ o KY--Z-/@@Yh&D>h@@  c@JGoTQ@J@%z$%@SaQ2@--t00:@@@160@ [ :`@  @=FAGAG @!@(ϕ(`@E@]@7b6E@@K G@Z8A@C7z7!@@\[Q @ 1 @@LmJG@@  jThRu\\@YQ UfS@D2֕2Z::@@"L!+@@@@LI @s[YH[M@lB@XXG{GANN[ǒO3@Y$b1M0T“R@E?@ ٕ xZ1@PBP"@X h++@MNJ\Ғ]@Y 20N0 BB<;KH@  1C=MÓK@XE O@O @|/"!հC=@@Y$7@++@*)Ұ[;߰]X@"ٓ!\7U@CL=nE@9K~HRW{W@@Zђ/@Y|E ?LI@,`,ML,I(U“S@@@;m;N@X483@ ذ@_T_1@7'M:@ZF(@4m4*@@PP@@3s2\1O9@F }5$4@Yے!!v@@@[52@ bBR<4__l@Z(r@00MJP6P@Bt<[@ڕ@ғ@2~2b@;@@P@@