Caml1999I037(ZgVd)Parsetree(constant;@@+pconst_desc#@@-constant_desc@@@r5parsing/parsetree.mliZZ@@B@*pconst_loci@@(Location!t@@@q[[@@&C@@@A@@@@@Y\@@@@*@@A@;@@.Pconst_integerj&stringQ@@@}&optionL$charB@@@{@@@|@@7_248_2\@@LD@+Pconst_chark@@@z@@Ee Fe5@@ZE@-Pconst_stringl,@@@yK!t@@@x1<@@@v@@@w@@dfWYefW@@yF@,Pconst_floatmK@@@uIG@@@s@@@t@@|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Ր)structurea@@@@@K F HK F [@@-S@$PSig֐)signatureR@@@@@(L \ ^)L \ q@@=T@$PTypא)core_type$@@@@@8M  9M  @@MU@$PPatؐ'pattern+@@@*expression-@@@@@@@@TN  UN  @@iV@@@A@@@@@XJ 8 8@@@@lL@B@(;@@)ptyp_desc@@.core_type_desc%@@@iV  jV  @@~W@(ptyp_loc@@h!t@@@wW  xW  @@X@.ptyp_loc_stack@@@@@X  X  @@Y@/ptyp_attributes@@@@@Y  Y  4@@Z@@@A@@@@@T  Z S X@@@@M@B@3;@@(Ptyp_anyݐ@@] o q] o {@@[@(Ptyp_varސ@@@@@^  ^  @@\@*Ptyp_arrowߐ)arg_label@@@@@@@@@@@_  _  @@]@*Ptyp_tupleE@@@@@@@@@@@@@@@@@@hh@@^@+Ptyp_constrᐠK#loc)Longident!t@@@@@@u@@@@@@@@sKMsK~@@_@+Ptyp_object萠,object_field)@@@@@@x+closed_flag@@@@@"yac#ya@@7`@*Ptyp_class鐠#loc")"+?")"5@@Sz@(Ppat_var#loc*@@@@@@@@R"O"QS"O"i@@g{@*Ppat_alias@@@#locB@@@@@@@@j""k""@@|@-Ppat_constant@@@@@x""y"#@@}@-Ppat_interval@@@@@@@@#R#T#R#z@@~@*Ppat_tuple @q|@@@@@@@d@@@@@@@@+closed_flag@@@@@$$$$Z@@@.Ppat_construct#loc!t@@@@@@@F/#loc@@@@@@@@@@@@@@@@@@@@&m&o&m&@@@,Ppat_variant J%label@@@ˠ@@@@@@@@(+(-(+(U@@@+Ppat_record }@j#loc!t@@@@@@@@@@@@@@@}+closed_flag@@@@@'(((()(@@<@*Ppat_array @@@@@@@@9*w*y:*w*@@N@'Ppat_or @@@@@@@@J**K**@@_@/Ppat_constraint @@@&@@@@@[ **\ *+@@p@)Ppat_type#locu!t@@@@@@@@q!+:+<r!+:+Z@@@)Ppat_lazy9@@@@@~"+u+w"+u+@@@+Ppat_unpack#loccn@@@@@@@@@@@#++#++@@@.Ppat_exception_@@@@@+,,+,,@@@+Ppat_effectl@@@ܠp@@@@@,--,--8@@@.Ppat_extension@@@@@--T-V--T-s@@@)Ppat_open'#loc!t@@@@@@٠@@@@@.--.--@@@@@A@@@@@""@@@@U@B@;@@)pexp_desc@@/expression_desc.@@@ 4.. 4..%@@@(pexp_loc@@!t@@@ 5.&.+5.&.@@@@.pexp_loc_stack@@@@@  6.A.F 6.A.e@@@/pexp_attributes@@@@@ 7.f.k7.f.@@*@@@A@@@@@2--8..@@@@.V@B@1;@@*Pexp_ident#loc7!t@@@n@@@o@@3;..4;..@@H@-Pexp_constant@@@m@@@>//A>//:@@U@(Pexp_let(rec_flag@@@lƠ-value_bindinge@@@j@@@k@@@i@@_A//`A//@@t@-Pexp_functionߠ.function_param3@@@g@@@hK/type_constraint5@@@e@@@f-function_body4@@@d@@H1517I1J1@@@*Pexp_applyD@@@c @)arg_label@@@`@W@@@_@@a@@@b@@X44X44Y@@@*Pexp_matche@@@^,$case/@@@\@@@]@@c55c56@@@(Pexp_try~@@@[E@@@Y@@@Z@@e6T6Ve6T6z@@@*Pexp_tuple W@@@@U@@@V@@@@T@@W@@@X@@g66g66@@ @.Pexp_construct!]#loc!t@@@R@@@S@@@P@@@Q@@r8L8Nr8L8@@,@,Pexp_variant"|%label@@@O@@@M@@@N@@/x9x9z0x9x9@@D@+Pexp_record#@#locQ!t@@@I@@@J@@@@H@@K@@@L* @@@F@@@G@@\}:5:7]}:5:@@q@*Pexp_field$@@@E#locz!t@@@C@@@D@@v;z;|w;z;@@@-Pexp_setfield%3@@@B#loc!t@@@@@@@AD@@@?@@;;;;@@@*Pexp_array&U@@@=@@@>@@<<<<1@@@/Pexp_ifthenelse'c@@@<g@@@;o@@@9@@@:@@=<=@@@/Pexp_constraint+@@@/@@@.@@>>>>@@'@+Pexp_coerce,@@@-@@@+@@@,@@@*@@,? ?-? ?I@@A@)Pexp_send-@@@)#loc%label@@@'@@@(@@E??F?@@@Z@(Pexp_new.#loc_!t@@@%@@@&@@[@*@,\@*@I@@p@/Pexp_setinstvar/#loc%label@@@#@@@$$@@@"@@t@\@^u@\@@@@-Pexp_override0@#loc%label@@@@@@@F@@@@@ @@@!@@@@@@@@@0Pexp_struct_item1.structure_itemb@@@[@@@@@@@@A,@@@+Pexp_assert2h@@@@@AHAJAHAe@@@)Pexp_lazy3u@@@@@AAAA@@@)Pexp_poly4@@@@@@@@@@@B B B B7@@@+Pexp_object5/class_structureJ@@@@@BBBC@@ @,Pexp_newtype6P#loc@@@@@@@@@@@ C/C1 C/CZ@@ @)Pexp_pack7+module_expr_@@@m@@@@@@@@ CwCy CwC@@ 1@*Pexp_letop8%letop0@@@@@ ,CC -CC@@ A@.Pexp_extension9a@@@ @@ 9DHDJ :DHDg@@ N@0Pexp_unreachable:@@ BDxDz CDxD@@ W@@@A@@@@@ F:..@@@@ ZW@B@;@@&pc_lhs;@@@@@s TDD UDD@@ i@(pc_guard<@@ 2@@@q@@@r dDD eDD@@ y@&pc_rhs=@@@@@p oDD pDD@@ @@@A@@@@@ sDD tDE@@@@ X@B@P;@@$let_>@@*binding_op1@@@w E\E` E\Er@@ @$ands?@@ @@@u@@@v EsEw EsE@@ @$body@@@P@@@t EE EE@@ @@@A@@@@@ ELEL EE@@@@ Y@B@(;@@'pbop_opA@@ #loc @@@{@@@| EE EE@@ @(pbop_patB@@@@@z EE EE@@ @(pbop_expC@@@@@y EE EF @@ @(pbop_locD@@ !t@@@x F F F F'@@ @@@A@@@@@ EE F(F+@@@@ Z@B@3function_param_desc2;@@*Pparam_valE M)arg_label@@@ Π@@@@@@@@@@@ FGFI FGF@@ @.Pparam_newtypeF i#loc @@@}@@@~@@ HH HI@@ -@@@A@@@@@ F-F-@@@@ 0[@B@;@@*pparam_locG@@ !t@@@ -LrLv .LrL@@ B@+pparam_descH@@P@@@ 9LL :LL@@ N@@@A@@@@@ =L]L] >LL@@@@ R\@B@;@@.Pfunction_bodyI@@@@@ NLL OLL@@ c@/Pfunction_casesJ Π@@@@@@ X!t@@@@@@@@ kLL lLM*@@ @@@A@@@@@ oLL@@@@ ]@B@;@@+PconstraintK J@@@@@ NN NN@@ @'PcoerceL _ [@@@@@@ `@@@@@ NN NN@@ @@@A@@@@@ NN@@@@ ^@B@1value_description6;@@)pval_nameM@@ #loc @@@@@@  OpOu  OpO@@ @)pval_typeN@@ @@@ OO OO@@ @)pval_primO@@ 9 @@@@@@ OO OO@@ @/pval_attributesP@@ I@@@ OO OO@@ @(pval_locQ@@ !t@@@ PP  PP"@@ @@@A@@@@@  OROR P#P(@@@@ _@B@0type_declaration7;@@*ptype_nameR@@ R#loc @@@@@@ QjQo QjQ@@ @,ptype_paramsS@@ @ @@@@@ u(variance@@@@ |+injectivity@@@@@@@@@@ 'QQ (QQ@@ <@+ptype_cstrsT@@ @ @@@@ @@@@ 8!t@@@@@@@@ H!QQ I!QR!@@ ]@*ptype_kindU@@)type_kind8@@@ V#R^Rc W#R^Ry@@ k@-ptype_privateV@@ ,private_flag@@@ c$RzR d$RzR@@ x@.ptype_manifestW@@ A =@@@@@@ s%RR t%RR@@ @0ptype_attributesX@@ @@@ ~&RR &RS@@ @)ptype_locY@@ }!t@@@ 'S=SB 'S=SX@@ @@@A@@@@@ QMQM (SYS^@@@@ `@B@C;@@.Ptype_abstractZ@@ DX X" DX X2@@ @-Ptype_variant[ 7constructor_declaration:@@@@@@@@ EX3X5 EX3Xd@@ @,Ptype_record\ 21label_declaration9@@@@@@@@ FXeXg FXeX@@ @*Ptype_open]@@ GXX GXX@@ @@@A@@@@@ CXX@@@@ a@B@;@@(pld_name^@@ :#loc @@@@@@ KXX KXX@@ @+pld_mutable_@@ L,mutable_flag@@@ LXY LXY@@ @(pld_type`@@ @@@ MYY  MYY4@@ @'pld_loca@@ !t@@@ NY5Y: NY5YN@@ $@.pld_attributesb@@ @@@ OYOYT OYOYo@@ /@@@A@@@@@ IXX PYY@@@@ 3b@B@v;@@(pcd_namec@@ #loc @@@@@@ 4^[}[ 5^[}[@@ I@(pcd_varsd@@  #loc "@@@@@@@@@ K_[[ L_[[@@ `@(pcd_argse@@5constructor_arguments;@@@ Y`[[ Z`[[@@ n@'pcd_resf@@ 7 3@@@@@@ ia[[ ja[[@@ ~@'pcd_locg@@ h!t@@@ wb[\ xb[\@@ @.pcd_attributesh@@ @@@ c\\ c\\8@@ @@@A@@@@@ \[Y[Y d\\\a@@@@ c@B@6;@@+Pcstr_tuplei  f@@@@@@@@ g\\ g\\@@ @,Pcstr_recordj @@@@@@@@ h\\ h\\@@ @@@A@@@@@ f\c\c@@@@ d@B@.type_extension<;@@+ptyext_pathk@@ #loc !t@@@@@@̰ y__ y__@@ @-ptyext_paramsl@@ I@ @@@Ƞ@@ ?(variance@@@Ơ@ F+injectivity@@@@@@@@@@ʰ z__ z__@@ @3ptyext_constructorsm@@ o5extension_constructor=@@@@@@İ {__ {_`%@@ @.ptyext_privaten@@ g,private_flag@@@° |`&`+ |`&`H@@ &@*ptyext_loco@@ !t@@@ }`I`N }`I`e@@ 4@1ptyext_attributesp@@ @@@ *~`f`k +~`f`@@ ?@@@A@@@@@ .w_q_q /``@@@@ Ce@B@4;@@)pext_nameq@@ #loc @@@@@@Ѱ Da<aA Ea<aW@@ Y@)pext_kindr@@:extension_constructor_kind?@@@ϰ RaXa] SaXa@@ g@(pext_locs@@ Q!t@@@ΰ `aa aaa@@ u@/pext_attributest@@ @@@Ͱ kaa laa@@ @@@A@@@@@ oaa paa@@@@ f@B@.type_exception>;@@2ptyexn_constructoru@@@@@԰ bb bb2@@ @*ptyexn_locv@@ !t@@@Ӱ b3b7 b3bO@@ @1ptyexn_attributesw@@ @@@Ұ bPbT bPbs@@ @@@A@@@@@ aa bb@@@@ g@B@T;@@)Pext_declx ! #loc @@@@@@@@@ܠh@@@٠  @@@@@@@@ bb bc=@@ @+Pext_rebindy ,#loc !t@@@@@@@@ ff ff@@ @@@A@@@@@ bb@@@@ h@B@*class_type@;@@)pcty_descz@@/class_type_descA@@@߰ gggl ggg@@ @(pcty_loc{@@ !t@@@ްgggg@@@/pcty_attributes|@@ @@@ݰ gggg@@"@@@A@@@@@gPgPgg@@@@&i@B@&;@@+Pcty_constr} z#loc /!t@@@@@@  @@@@@@@@4hh5hh3@@I@.Pcty_signature~/class_signatureB@@@@@DhihkEhih@@Y@*Pcty_arrow )arg_label@@@ "@@@u@@@@@\hh]hh@@q@.Pcty_extension @@@@@ijUjWjjUjt@@~@)Pcty_open0open_descriptionY@@@"@@@@@}jj~jj@@@@@A@@@@@gg@@@@j@B@E;@@*pcsig_self@@ Z@@@jjjk@@@,pcsig_fields@@ 0class_type_fieldC@@@@@@kk kk/@@@@@A@@@@@jjk0k5@@@@k@B@;@@)pctf_desc@@5class_type_field_descD@@@l4l9l4lZ@@@(pctf_loc@@!t@@@l[l`l[lu@@@/pctf_attributes@@ C@@@lvl{lvl@@@@@A@@@@@llll@@@@l@B@&;@@,Pctf_inherit@@@@@llll@@@(Pctf_val@O#locT%label@@@@@@@\,mutable_flag@@@@c,virtual_flag@@@@ @@@@@@@mmmmV@@'@+Pctf_method@{#loc%label@@@@@@@,private_flag@@@@,virtual_flag@@@@ @@@@@@@>momq?mom@@S@/Pctf_constraint@@@@@@@@@@@@Tn%n'Un%nS@@i@.Pctf_attribute_@@@@@anqnsbnqn@@v@.Pctf_extension @@@@@nnnonn@@@@@A@@@@@rll@@@@m@B@+class_infosE;!a@@A(pci_virt@@,virtual_flag@@@nnno@@@*pci_params@@@g@@@ @@(variance@@@ @+injectivity@@@@@ @@ @@@ ooooM@@@(pci_name@@#loc@@@@@@oNoSoNoh@@@(pci_expr@@Noionoio{@@@'pci_loc@@!t@@@o|oo|o@@ @.pci_attributes@@T@@@oooo@@ @@@A@Y@@@@@nnoo@@@@n@B@1class_descriptionF;@@@A@@@@@@@@@@pppp@@@@o@B@6class_type_declarationG;@@@A@@@@@@@@@@ pppq @@@@"p@B@*class_exprH;@@(pcl_desc@@/class_expr_descI@@@!qYq^"qYqx@@6 @'pcl_loc@@ !t@@@/qyq~0qyq@@D @.pcl_attributes@@@@@:qq;qq@@O @@@A@@@@@>qBqB?qq@@@@Sq@B@&;@@*Pcl_constr#loc\!t@@@,@@@-Ϡ+@@@*@@@+@@aqqbqr!@@v@-Pcl_structure@@@)@@nrKrMorKro@@@'Pcl_fun)arg_label@@@(T5@@@&@@@'E@@@%{@@@$@@ rr rr@@@)Pcl_apply@@@#@)arg_label@@@ @_@@@@@!@@@"@@u}uu}u@@@'Pcl_let(rec_flag@@@6 p@@@@@@>@@@@@ vv vv@@@.Pcl_constraintK@@@@@@@@'xFxH'xFxs@@@-Pcl_extension@@@@@(xx(xx@@@(Pcl_open@@@m@@@@@)xx)xx@@@@@A@@@@@qq@@@@r@B@;@@*pcstr_self@@@@@0 -yy"-yy6@@"@,pcstr_fields@@+class_fieldK@@@.@@@/ .y7y<!.y7y[@@5@@@A@@@@@$+yy%/y\ya@@@@9s@B@;@@(pcf_desc@@0class_field_descL@@@368zYz^78zYzy@@K@'pcf_loc@@5!t@@@2D9zzzE9zzz@@Y@.pcf_attributes@@@@@1O:zzP:zz@@d@@@A@@@@@S6zAzAT;zz@@@@ht@B@&;@@+Pcf_inherit-override_flag@@@H@@@GA#locQ@@@D@@@E@@@F@@z>zz{>z{6@@@'Pcf_val@#loc%label@@@A@@@B@,mutable_flag@@@@@0class_field_kindM@@@?@@C@@M}}M}}@@@*Pcf_method@ #loc%label@@@<@@@=@,private_flag@@@;@(@@@:@@>@@\\5@@@.Pcf_constraint@@@@8@@@@7@@9@@bbH@@@/Pcf_initializer@@@6@@cfhcf@@@-Pcf_attribute@@@5@@dd@@  @-Pcf_extension,@@@4@@ee@@!@@@A@@@@@=zz@@@@u@B@n;@@+Cfk_virtual@@@K@@hh8@@-"@,Cfk_concrete}-override_flag@@@J@@@I@@+i9;,i9g@@@#@@@A@@@@@/g@@@@Cv@B@1class_declarationN;@@@AF@@@L@@@M@@@@@kiiAki@@@@Uw@B@+module_typeO;@@)pmty_desc@@0module_type_descP@@@PTrUr"@@i$@(pmty_loc@@S!t@@@Obs#(cs#=@@w%@/pmty_attributes@@@@@Nmt>Cnt>_@@&@@@A@@@@@qpru~@@@@x@B@&;@@*Pmty_ident#loc!t@@@[@@@\@@xx@@'@.Pmty_signatures@@@Z@@yy@@(@,Pmty_functor1functor_parameterQ@@@Yf@@@X@@zzN@@)@)Pmty_with@@@W1/with_constraint^@@@U@@@V@@|vx|v@@*@+Pmty_typeof @@@T@@}}@@+@.Pmty_extension@@@S@@~~@@,@*Pmty_aliasE#loc!t@@@Q@@@R@@+-+L@@ -@@@A@@@@@w@@@@y@B@Z;@@$Unit@@{}{@@.@%Namedk#loc@@@^@@@_@@@`w@@@]@@#$@@8/@@@A@@@@@'cc@@@@;z@B@;@@@A.signature_itemS@@@a@@@b@@@@:KK;Kn@@@@O{@B@ ;@@)psig_desc@@3signature_item_descT@@@dLM@@a0@(psig_loc@@K!t@@@cZ[@@o1@@@A@@@@@^pp_@@@@s|@B@;@@*Psig_value@@@{@@pq@@2@)Psig_type(rec_flag@@@z@@@x@@@y@@aca@@3@.Psig_typesubst @@@v@@@w@@@@4@+Psig_typext@@@u@@')'H@@5@.Psig_exceptionA@@@t@@bdb@@6@+Psig_module2module_declarationU@@@s@@@@7@-Psig_modsubst3module_substitutionV@@@r@@@@8@.Psig_recmoduleW$@@@p@@@q@@464a@@9@,Psig_modtype7module_type_declarationW@@@o@@@@:@1Psig_modtypesubstÐ@@@n@@,@@;@)Psig_openĐ@@@m@@SUSt@@(<@,Psig_includeŐ3include_description\@@@l@@#$@@8=@*Psig_classƐF@@@j@@@k@@67@@K>@/Psig_class_typeǐF@@@h@@@i@@I!JQ@@^?@.Psig_attributeȐT@@@g@@VW@@k@@.Psig_extensionɐ@@@f@@@e@@gh@@|A@@@A@@@@@k@@@@}@B@;@@(pmd_name@@#locQ\@@@@@@@@@$@@@B@(pmd_type@@@@@~AFA\@@C@.pmd_attributes@@ @@@}]b]}@@D@'pmd_loc@@!t@@@|@@E@@@A@@@@@@@@@~@B@;@@(pms_name@@#loc@@@@@@ % :@@F@,pms_manifest@@&#loc!t@@@@@@;@;^@@G@.pms_attributes@@T@@@_d_@@H@'pms_loc@@!t@@@@@I@@@A@@@@@@@@@ @B@;@@)pmtd_name@@[#loc@@@@@@ ', 'B@@J@)pmtd_type@@m@@@@@@CHCf@@/K@/pmtd_attributes@@@@@%gl&g@@:L@(pmtd_loc@@$!t@@@34@@HM@@@A@@@@@78@@@@L@@B@*open_infosX;!a@@A*popen_expr@@ JK@@_N@.popen_override@@-override_flag@@@WX@@lO@)popen_loc@@V!t@@@ef@@zP@0popen_attributes@@@@@pq@@Q@@@A@Y@@@@@vw %@@@@A@B@;@@@AE#loc!t@@@@@@@@@@@@@@@@@B@B@0open_declarationZ;@@@A @@@@@@@@@@'''T@@@@C@B@-include_infos[;!a@@A)pincl_mod@@ @@R@)pincl_loc@@!t@@@@@S@0pincl_attributes@@@@@@;@@T@@@A@Y@@@@@<A@@@@D@B@;@@@A88@@@@@@@@@@CCCv@@@@E@B@3include_declaration];@@@A @@@@@@@@@@@@@@ F@B@;;@@*Pwith_typeݐ`#loc!t@@@@@@@@@@@KMK@@*U@,Pwith_moduleސz#loc/!t@@@@@@#loc5z@@Rq@*Pstr_class@@@@@@@@P6Q6@@er@/Pstr_class_typeР@@@@@@@@b8  c8 ;@@ws@,Pstr_include@@@@@p:vxq:v@@t@.Pstr_attribute{@@@@@};~;@@u@.Pstr_extension@@@Ơ@@@@@<<@@v@@@A@@@@@MM@@@@L@B@0value_constraintd;@@.Pvc_constraint8locally_abstract_univars@@#loc@@@@@@@@@@V\@V@@w@#typ@@@@@AA@@x@@@?>@B@@y@,Pvc_coercion&ground@@@@@@@@߰CC@@z@(coercion@@@@@ݰCC@@{@@@CC@@|@@@A@@@@@>''@@@@M@B@;@@'pvb_pat@@@@@PP@@ }@(pvb_expr@@@@@QQ@@~@.pvb_constraint@@{@@@@@@RRE@@)@.pvb_attributes@@@@@SFJ SFe@@4@'pvb_loc @@!t@@@-Tfj.Tf~@@B@@@A@@@@@1N2U@@@@FN@B@*;@@(pmb_name @@#loc#@@@@@@@@@LYMY@@a@(pmb_expr @@G@@@WZXZ@@l@.pmb_attributes @@@@@b[ c[%@@w@'pmb_loc @@a!t@@@p\&+q\&?@@@@@A@@@@@tWu]@E@@@@O@B@/toplevel_phraseg;@@(Ptop_defr@@@@@ee@@@(Ptop_dir2toplevel_directiveh@@@@@ff@@@@@A@@@@@d@@@@@A@ ;@@)pdir_name@@#loc@@@@@@jIMjIc@@@(pdir_arg@@2directive_argumenti@@@@@@kdhkd@@@(pdir_loc@@!t@@@ll@@@@@A@@@@@h,,m@@@@@B@;@@*pdira_desc@@7directive_argument_descj@@@qq@@@)pdira_loc@@!t@@@rr @@ @@@A@@@@@os @@@@@B@;@@+Pdir_string@@@@@ v02 v0I@@ @(Pdir_int@@@@@@@@@@@#wJL$wJn@@8@*Pdir_ident8!t@@@@@3xoq4xo@@H@)Pdir_bool@@@@@AyBy@@V@@@A@@@@@Eu@@@@Y@B@@RZP)Parsetree0T鿁ۘ7Qu(Warnings0mJɒkgrn{T8cئ@@@Caml1999T037qaISC)Parsetree*ocaml.text&_none_@@A Abstract syntax tree produced by parsing {b Warning:} this module is unstable and part of {{!Compiler_libs}compiler-libs}. 5parsing/parsetree.mliP77U@@@@@@3@@@@@@#intA;@@@A@@@@@:@A@$charB;@@A@@@@@>@A@&stringQ;@@ A@@@@@B@@@%bytesC;@@ A@@@@@F@@@%floatD;@@A@@@@@J@@@$boolE;@@%falsec@@T@$trued@@Z@@@A@@@@@[@A@$unitF;@@"()e@@e@@@A@@@@@f@A@ #exnG;@@@A@@@@@j@@@#effH;@@O@A@A@@@@@@s@@@,continuationI;@@Q@@P@B@A@nY@@@@@@@@@%arrayJ;@@R@A@A@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@A@@@@@@@@%int32N;@@A@@@@@@@@%int64O;@@A@@@@@@@@&lazy_tP;@@X@AJA@Y@@@@@@@@5extension_constructorR;@@A@@@@@@@@*floatarrayS;@@A@@@@@@@@&iarrayT;@@Y@A[A@Y@@@@@@@@*atomic_locU;@@Z@AdA@@@@@@@@@.Assert_failure`#@@@@@J@@@@@@@@[@@A=ocaml.warn_on_literal_pattern @ @0Division_by_zero]#@@@A  @+End_of_file\#$@@@A@'FailureY#,@'@@A!$$@0Invalid_argumentX#5@0@@A*$-#-@-Match_failureV#>@@=@9@;@@a@@A;5>4>@)Not_foundZ#O@@@AC=F<F@-Out_of_memoryW#W@@@AKENDN@.Stack_overflow^#_@@@ASMVLV@.Sys_blocked_io_#g@@@A[U^T^@)Sys_error[#o@j@@Ad^g]g@:Undefined_recursive_modulea#x@@w@s@u@@h@@Auoxnx@:Continuation_already_takenb#@@@A}wv@&Stdlib@Axࠐ(Asttypes(AsttypesWW@@A3@ @AW@@@A+(constant!AYY@@;@@+pconst_desc#@@-constant_desc"A@@@ѰZZ@@B@*pconst_loci@@(Location!t@@@ #[[@@C@@@A@@@@@Y\@@@@@@@###Z@@@Ш@г&-constant_descZZ@@.3@F=;@@@A@@@@@@@@0;@@@A@@@@@^l<d@@@@A@@A @@<@@@6@#22)[ @(@@Ш@г5(Location[[@:[[@@@D$@@G@@ $'@?@@A@;@+TT^"^/@@;@@.Pconst_integerj@@@ &i@@@ '@@@ )@@ _24_2\@)ocaml.doc Integer constants such as [3] [3l] [3L] [3n]. Suffixes [[g-z][G-Z]] are accepted by the parser. Suffixes except ['l'], ['L'] and ['n'] are rejected by the typechecker `]cd@@@@@@@6D@+Pconst_chark@@@ *@@+e ,e5@: Character such as ['c']. 9e7:eV@@@@@@@RE@-Pconst_stringl@@@ +!t@@@ ,#@@@ -@@@ /@@XfWYYfW@K Constant string such as ["constant"] or [{delim|other constant|delim}]. The location span the content of the string, without the delimiters. fggk7;@@@@@@@F@,Pconst_floatm@@@@ 0ڠM@@@ 1@@@ 3@@~l<>@p Float constant such as [3.4], [2e5] or [1.4e-4]. Suffixes [g-z][G-Z] are accepted by the parser. Suffixes are rejected by the typechecker. mekq @@@@@@@G@@@A@@@@@@@@@#_26_2D@v@г&string_2H_2N@@ְ@@г&option_2V@г$char_2Q_2U@@@@@@@@@Ð@@@@@@#e"e-@@г$chare1@@@@@@ސ@@@@@@#fW[fWh@w@г&stringfWlfWr@@ @@г(LocationfWufW}@fW~fW@@@1@@г&optionfW@г&string fW fW@@C@@@D@@@@@@@@@@#l<@l<L@@г&string'l<P(l<V@@`@@г&option1l<^`@г$char9l<Y:l<]@@r@@@sk@@@@.M@@@@@@@A@x@@ðw@A+.location_stackBRs Ss @@;@@@Aڠ!t@@@ @@@ @@@@cs  ds 0@@@@|H@@@Aг$listms , @г(Locationws !xs )@{s *|s +@@@#3{zz{{{{{@4;@@@A<@@@ @ @@@@)@@@&@A@@@5)@@+@@3@@A,+@6 {1 Extension points} u22u2M@@@@@@3@"TN@AA+)attributeCwOTwO]@@;@@)attr_name@@:#loc@@@ @@@ xbfxb}@@P@,attr_payload@@'payloadC@@@ °y~y~@@Q@(attr_loc@@*!t@@@ Űzz@@R@@@A@@@@@wOO{@ѐ Attributes such as [[\@id ARG]] and [[\@\@id ARG]]. Metadata containers passed around within the AST. The compiler ignores unknown attributes. |@ a j@@@@@@@@@I@@#AA6xbo@5@@Ш@гDExbyxb|@гG&stringxbrxbx@@O3@;@@@A@@@@@tq@@c)extensionC;@@@A @@@S@ @@@@]B l l^B l @P  Extension points such as [[%id ARG] and [%%id ARG]]. Sub-language placeholder -- rejected by the typechecker. kC  lF  @@@@@@@@@J@*attributesC;@@@A @@@T@ @@@@zH  {H  6@@@@K@;@@@A@@@@@J 8 8N  @@@@L@)core_typeC;@@@A@@@@@T  Z S X@3 {1 Core language} Q g gQ g @@@@@@6 {2 Type expressions} R  R  @@@@@@@@@M@.core_type_descC;@@@A@@@@@\ Z Z@@@@N@,package_typeC;@@@A@@@@@in@ As {!package_type} typed values: - [{ppt_path: S; ppt_cstrs: []}] represents [(module S)], - [{ppt_path: S; ppt_cstrs: [(t1, T1) ; ... ; (tn, Tn)]}] represents [(module S with type t1 = T1 and ... and tn = Tn)]. oocl@@@@@@@@@O@)row_fieldC;@@@A@@@@@nn@@@@P@.row_field_descC;@@@A@@@@@ W p@@@@Q@,object_fieldC;@@@A@@@@@    @@@@R@1object_field_descC;@@@A@@@@@  !-!F@@@@S@'patternC;@@@A@@@@@!]!]""@c. {2 Patterns} !H!H!H![@@@@@@@@@T@,pattern_descC;@@@A@@@@@"".--@@@@U@*expressionC;@@@A@@@@@ 2-- 8..@7 {2 Value expressions} 0--0--@@@@@@@@@0V@/expression_descC;@@@A@@@@@:.. DxD@@@@8W@$caseC;@@@A@@@@@'DD(DE@ D Values of type {!case} represents [(P -> E)] or [(P when E0 -> E)] 5EE6EEJ@@@@@@@@@NX@%letopC;@@@A@@@@@=ELEL>EE@@@@VY@*binding_opC;@@@A@@@@@EEEFF(F+@@@@^Z@3function_param_descC;@@@A@@@@@MF-F-NHI@@@@f[@.function_paramC;@@@A@@@@@UL]L]VLL@@@@n\@-function_bodyC;@@@A@@@@@]LL^LM*@P G See the comment on {{!expression_desc.Pexp_function}[Pexp_function]}. kN8N8lN8N@@@@@@@@@]@/type_constraintC;@@@A@@@@@sNNtNN@@@@^@1value_descriptionC;@@@A@@@@@{ OROR|P#P(@󐠠8 {2 Value descriptions}  O3O3 O3OP@@@@@@| Values of type {!value_description} represents: - [val x: T], when {{!value_description.pval_prim}[pval_prim]} is [[]] - [external x: T = "s1" ... "sn"] when {{!value_description.pval_prim}[pval_prim]} is [["s1";..."sn"]] P)P)Q+Q-@@@@@@@@@_@0type_declarationC;@@@A@@@@@QMQM(SYS^@7 {2 Type declarations} Q/Q/Q/QK@@@@@@  Here are type declarations and their representation, for various {{!type_declaration.ptype_kind}[ptype_kind]} and {{!type_declaration.ptype_manifest}[ptype_manifest]} values: - [type t] when [type_kind] is {{!type_kind.Ptype_abstract}[Ptype_abstract]}, and [manifest] is [None], - [type t = T0] when [type_kind] is {{!type_kind.Ptype_abstract}[Ptype_abstract]}, and [manifest] is [Some T0], - [type t = C of T | ...] when [type_kind] is {{!type_kind.Ptype_variant}[Ptype_variant]}, and [manifest] is [None], - [type t = T0 = C of T | ...] when [type_kind] is {{!type_kind.Ptype_variant}[Ptype_variant]}, and [manifest] is [Some T0], - [type t = {l: T; ...}] when [type_kind] is {{!type_kind.Ptype_record}[Ptype_record]}, and [manifest] is [None], - [type t = T0 = {l : T; ...}] when [type_kind] is {{!type_kind.Ptype_record}[Ptype_record]}, and [manifest] is [Some T0], - [type t = ..] when [type_kind] is {{!type_kind.Ptype_open}[Ptype_open]}, and [manifest] is [None]. )S_S_AX X@@@@@@@@@`@)type_kindC;@@@A@@@@@CXXGXX@@@@a@1label_declarationC;@@@A@@@@@IXXPYY@  - [{ ...; 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]}. QYYZ[U[W@@@@@@@@@b@7constructor_declarationC;@@@A@@@@@\[Y[Yd\\\a@@@@c@5constructor_argumentsC;@@@A@@@@@f\c\ch\\@@@@d@.type_extensionC;@@@A@@@@@w_q_q``@䐠 c Definition of new extensions constructors for the extensive sum type [t] ([type t += ...]). ``aa@@@@@@@@@e@5extension_constructorC;@@@A@@@@@aaaa@@@@ f@.type_exceptionC;@@@A@@@@@aabb@ 0 Definition of a new exception ([exception E]). bbbb@@@@@@@@@6g@:extension_constructor_kindC;@@@A@@@@@%bb&ff@@@@>h@*class_typeC;@@@A@@@@@-gPgP.gg@4 {1 Class language} ;gg<gg@@@@@@ - {2 Type expressions for the class language} IggJggN@@@@@@@@@bi@/class_type_descC;@@@A@@@@@QggRjj@@@@jj@/class_signatureC;@@@A@@@@@YjjZk0k5@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]} gk6k6hll@@@@@@@@@k@0class_type_fieldC;@@@A@@@@@ollpll@@@@l@5class_type_field_descC;@@@A@@@@@wllxnn@@@@m@+class_infosC;@@ @A@A@G@B@@@nnoo@w Values of type [class_expr class_infos] represents: - [class c = ...] - [class ['a1,...,'an] c = ...] - [class virtual c = ...] They are also used for "class type" declaration. oopp@@@@@@@@@n@1class_descriptionC;@@@A @@@U@ @@@@pppp@@@@o@6class_type_declarationC;@@@A @@@V@ @@@@pppq @@@@p@*class_exprC;@@@A@@@@@qBqBqq@0 . {2 Value expressions for the class language} q q q q@@@@@@@@@@q@/class_expr_descC;@@@A@@@@@qq)xx@@@@r@/class_structureC;@@@A@@@@@+yy/y\ya@ɐ 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]} 0ybyb4z=z?@@@@@@@@@s@+class_fieldC;@@@A@@@@@6zAzA;zz@@@@t@0class_field_descC;@@@A@@@@@=zze@@@@ u@0class_field_kindC;@@@A@@@@@gi9g@@@@v@1class_declarationC;@@@A @@@W@ @@@@ kii ki@@@@$w@+module_typeC;@@@A@@@@@pu~@5 {1 Module language} !m"m@@@@@@ . {2 Type expressions for the module language} /n0n@@@@@@@@@Hx@0module_type_descC;@@@A@@@@@7w8+L@@@@Py@1functor_parameterC;@@@A@@@@@?cc@@@@@Xz@)signatureC;@@@A @@@X@ @@@@NKKOKn@@@@g{@.signature_itemC;@@@A@@@@@VppW@@@@o|@3signature_item_descC;@@@A@@@@@^_@@@@w}@2module_declarationC;@@@A@@@@@fg@Y 9 Values of type [module_declaration] represents [S : MT] tu@@@@@@@@@~@3module_substitutionC;@@@A@@@@@|}@o : Values of type [module_substitution] represents [S := M] @@@@@@@@@@7module_type_declarationC;@@@A@@@@@@ Values of type [module_type_declaration] represents: - [S = MT], - [S] for abstract module type declaration, when {{!module_type_declaration.pmtd_type}[pmtd_type]} is [None]. @@@@@@@@@@@*open_infosC;@@ @A@A@G@B@@@ %@ 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]} &&@@@@@@@@@A@0open_descriptionC;@@@A @@@Y@ @@@@@ T Values of type [open_description] represents: - [open M.N] - [open M(N).O] %@@@@@@@@@B@0open_declarationC;@@@A @@@Z@ @@@@'''T@ڐ p Values of type [open_declaration] represents: - [open M.N] - [open M(N).O] - [open struct ... end] UU@@@@@@@@@C@-include_infosC;@@ @A@A@G@B@@@<A@@@@D@3include_descriptionC;@@@A @@@[@ @@@@CCCv@ > Values of type [include_description] represents [include MT] ww w@@@@@@@@@8E@3include_declarationC;@@@A @@@\@ @@@@./@! > Values of type [include_declaration] represents [include ME] <=3@@@@@@@@@UF@/with_constraintC;@@@A@@@@@D55E@@@@]G@+module_exprC;@@@A@@@@@L<<M @Đ / {2 Value expressions for the module language} Z[:@@@@@@@@@sH@0module_expr_descC;@@@A@@@@@b c@@@@{I@)structureC;@@@A @@@]@ @@@@qr@@@@J@.structure_itemC;@@@A@@@@@yzFK@@@@K@3structure_item_descC;@@@A@@@@@MM<@@@@L@0value_constraintC;@@@A@@@@@>''C@@@@M@-value_bindingC;@@@A@@@@@NU@ # [let pat : type_constraint = exp]  U@@@@@@@@@N@.module_bindingC;@@@A@@@@@W]@E@ < Values of type [module_binding] represents [module X = ME] ^FF^F@@@@@@@@@O@@A@@@@@@@ @@#y~@@@Ш@г'payloady~y~@@ð@@@@ @@#z@@@Ш@г(Locationzz@zz@@@ܰ@@@@ @ @@A@ @@@@@@+B l pB l y@@;@@A@#loc@@@ @@@ ͠@D@@@ @@ @@@@@@@@AВ@г B l  B l @г&string B l | !B l @@ @@@& @@@г'payload ,B l @@$&@@@5'@@Ӡ  ?@@@@@@+Πΰ >H   ?H  %@@;@@AŠ@@@ @@@ @@@@@@@@@Aг $list RH  2@г)attribute ZH  ( [H  1@@U@@@V@@@+ bJ 8 < cJ 8 C@@;@@$PStrՐ @@@ @@ qK F H rK F [@@ S@$PSig֐;@@@ @@ L \ ^ L \ q@r / [: SIG] in an attribute or an extension point  L \ s L \ @@@@@@@ T@$PTypא@@@ @@ M   M  @ - [: T] in an attribute or an extension point  M   M  @@@@@@@ U@$PPatؐ@@@ ֠ @@@ @@@ @@ N  A@ @ [? P] or [? P when E], in an attribute or an extension point  O   O  e@@@@@@@ V@@@A@@@@@R@@@O@#ll K F J K F N@e@гn)structure K F Ro@@uڰp@@@@r@#nn L \ ` L \ d@Y@гp)signature L \ hq@@wr@@@@t rq@qq@@@q@q@#mm M   M  @X@гo)core_type M  p@@vq@@@@s qp@pp@@@p@p@#ll N   N  @N@гn'pattern &N   'N  @@v!@@гs&option 0N  @гw*expression 8N   9N  @@3@@@4@@@@|- L{z@zz@@@z@z@@A@@+Ơư KT   LT  @@;@@)ptyp_desc@@@@@ ڰ XV   YV  @@ qW@(ptyp_loc@@!t@@@ ݰ fW   gW  @@ X@.ptyp_loc_stack@@"@@@  rX   sX  @@ Y@/ptyp_attributes@@@@@  ~Y   Y  4@q7 [... [\@id1] [\@id2]]  Y  6 Y  R@@@@@@@ Z@@@A@@@@@@@@#AA< V  @;@@Ш@гD.core_type_desc V   V  @@L@@O@@ @K@#GG@ W  @?@@Ш@гJ(Location W   W  @Q W   W  @@@Y@@\@@ @V@#RRM X  @L@@Ш@гU.location_stack X   X  @@]ð@@`@@ @\@#XXS Y  '@D@@Ш@г[*attributes Y  ) Y  3@@cհ@@f@@ @b `_@__@@@_@_@@A@c  `_@__@@@_@_  ]\@\\@@@\@\@+ZZ \ Z ^ \ Z l@@;@@(Ptyp_anyݐ@@ ] o q ] o {@ % [_]  ] o } ] o @@@@@@@ 5[@(Ptyp_varސ @@@ @@ *^   +^  @ > A type variable such as ['a]  8^   9^  @@@@@@@ Q\@*Ptyp_arrowߐ )arg_label@@@ @@@ @@@ @@ Q_   R_  @ D  [Ptyp_arrow(lbl, T1, T2)] represents: - [T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]}, - [~l:T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled]}, - [?l:T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional]}.  _`   `g@@@@@@@ x]@*Ptyp_tuple @ ֠ E@@@ @@@ 젠@@@@ @@ @@@ @@ h h@ t i [Ptyp_tuple(tl)] represents a product type: - [T1 * ... * Tn] when [tl] is [(None, T1); ...; (None, Tn)] - [L1:T1 * ... * Ln:Tn] when [tl] is [(Some L1, T1); ...; (Some Ln, Tn)] - A mix, e.g., [L1:T1 * T2] when [tl] is [(Some L1, T1); (None, T2)] Invariant: [n >= 2].  i r@J@@@@@@@ ^@+Ptyp_constrᐠ #loc)Longident!t@@@ ,@@@ . *+@@@ /@@@ 1@@ sKM sK~@ [Ptyp_constr(lident, l)] represents: - [tconstr] when [l=[]], - [T tconstr] when [l=[T]], - [(T1, ..., Tn) tconstr] when [l=[T1 ; ... ; Tn]].  t xU`@@@@@@@ _@+Ptyp_object萠 K@@@ 2@@@ 4 Y+closed_flag@@@ 5@@ yac ya@ ː U [Ptyp_object([ l1:T1; ...; ln:Tn ], flag)] represents: - [< l1:T1; ...; ln:Tn >] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, - [< l1:T1; ...; ln:Tn; .. >] when [flag] is {{!Asttypes.closed_flag.Open}[Open]}.  z @@@@@@@ `@*Ptyp_class鐠 v#locW!t@@@ 6@@@ 8 @@@ 9@@@ ;@@  '@ [Ptyp_class(tconstr, l)] represents: - [#tconstr] when [l=[]], - [T #tconstr] when [l=[T]], - [(T1, ..., Tn) #tconstr] when [l=[T1 ; ... ; Tn]].  (.  @@@@@@@ -a@*Ptyp_aliasꐠ@@@ < #loc @@@ =@@@ ?@@ -  . 5@ , [T as 'a].  ; 7 < H@@@@@@@ Tb@,Ptyp_variant될 Ǡ@@@ @@@@ B +closed_flag@@@ C  ۠ %label@@@ D@@@ F@@@ H@@ dIK eI@ W  [Ptyp_variant([`A;`B], flag, labels)] represents: - [[ `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, and [labels] is [None], - [[> `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Open}[Open]}, and [labels] is [None], - [[< `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, and [labels] is [Some []], - [[< `A|`B > `X `Y ]] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, and [labels] is [Some ["X";"Y"]].  r sFQ@@@@@@@ c@)Ptyp_poly쐠  #loc U@@@ I@@@ K@@@ M @@@ N@@ RT R~@  ['a1 ... 'an. T] Can only appear in the following context: - As the {!core_type} of a {{!pattern_desc.Ppat_constraint}[Ppat_constraint]} node corresponding to a constraint on a let-binding: {[let x : 'a1 ... 'an. T = e ...]} - Under {{!class_field_kind.Cfk_virtual}[Cfk_virtual]} for methods (not values). - As the {!core_type} of a {{!class_type_field_desc.Pctf_method}[Pctf_method]} node. - As the {!core_type} of a {{!expression_desc.Pexp_poly}[Pexp_poly]} node. - As the {{!label_declaration.pld_type}[pld_type]} field of a {!label_declaration}. - As a {!core_type} of a {{!core_type_desc.Ptyp_object}[Ptyp_object]} node. - As the {{!value_description.pval_type}[pval_type]} field of a {!value_description}.    @@@@@@@ d@,Ptyp_package퐠@@@ O@@ !# !A@ / [(module S)].  !C !W@@@@@@@ e@)Ptyp_open J#loc+!t@@@ P@@@ RP@@@ S@@ XZ X@ Ȑ) [M.(T)]  X X@@@@@@@ f@.Ptyp_extension@@@ T@@ D@ 㐠* [[%id]].   @@@@@@@ g@@@A@@@@@U@@@R@# ] o s@@@@  @@@@@@# ^   ^  @@г&string !^  @@ @@@@  3@@@@@@# 2_   3_  @@г ;_   <_  @@ 6@@г)core_type E_   F_  @@ @@@г)core_type O_  @@ I@@@@ B a@@@@@@# `h ah@@г$list jh@В@г&option vh wh@г&string h h@@  z@@@ { @@@г )core_type h h@@ @@@" @@@'  h@@@@  @@@@@@#   sKO sKZ@@г   sKj sKm@г)Longident sK^ sKg@ sKh sKi@@@ @@@$  @@г$list sKz@г)core_type sKp sKy@@# ǰ@@@( Ȱ@@@@   @@@@@@# yae yap@@г$list ya ya@г ,object_field yat ya@@( @@@-  @@г%& ya$@@+ %@@@@' %$@$$@@@$@$@#   @@г"#@г%)Longident!"@,%&@@@4 !@@@: " @@г/$list1#+@г3)core_type9:"@@; 4@@@@ 56@@@@8 .M65@55@@@5@5@#11L M @@г3)core_typeV W (@@; Q@@г89_ 22@г:&stringg +h 1@@B b@@@H c=@@@@? \{=<@<<@@@<@<@#88zIM{IY@@г:$listIgIk@г?)row_fieldI]If@@G @@@L  @@гDEInIy@@K @@гG&optionI=@гK$listII@гPQI|I@@W @@@\  @@@a Q@@@@S ƐQP@PP@@@P@P@#LLRVR_@'@гN$listRnRr@гSTRjRm@гV&stringRcRi@@^ ۰@@@d ܰ @@@i ݰ@@г[)core_typeRu\@@b ]@@@@_ ]\@\\@@@\@\@#XX!%!1@C@гZ,package_type!5[@@a \@@@@^ \[@[[@@@[@[@#WWX\Xe@5@гYZ!Xu"Xx@г\)Longident,Xi-Xr@c0Xs1Xt@@@k ,@@@q - @@гf)core_type<X{g@@m 6h@@@@j /Nhg@gg@@@g@g@#ccMN@O@гe)extensionW @@l Q @@@@i Jihg@gg@@@g@g@@A@ @+  hi@@;@@(ppt_path@@ #loc!t@@@ U@@@ W}~@@h@)ppt_cstrs@@@#loc!t@@@ Z@@@ \@ @@@ ]@@ ^@@@ `2@@i@'ppt_loc@@ !t@@@ c383L@@j@)ppt_attrs@@ J@@@ fMRMh@@k@@@A@@@@@  @@ @#RRE@D@@Ш@гUV@гX)Longident@_@@@g հ@@@m ְ @@p@@ X @d@#``D @C@@Ш@гc$list-1@В@гhi@гk)Longident@r @@@z @@@  @@@гu)core_type"+@@} @@@ @@@ -@@@@ a @~@#zzs!3?@r@@Ш@г}(Location,3A-3I@03J13K@@@ ,@@@@ d /@@#:M[@@@Ш@г*attributesCM]DMg@@ >@@@@ g A@@@A@ 9X  @  @@@ @ @+  WnrXn{@@;@@(prf_desc@@ @@@ lde@@}l@'prf_loc@@!t@@@ ors@@m@.prf_attributes@@ @@@ r~@@n@@@A@@@@@ @@@ @#''"@!@@Ш@г*.row_field_desc@@2 @@5@@ m @1@#--&@%@@Ш@г0(Location@7@@@? @@B@@ p @<@#883@2@@Ш@г;*attributes@@C @@F@@ s @B@@A@ @+  @@;@@$RtagT#locY%label@@@ u@@@ w@@@ xa b@@@ y@@@ {@@@ې 1 [Rtag(`A, b, l)] represents: - [`A] when [b] is [true] and [l] is [[]], - [`A of T] when [b] is [false] and [l] is [[T]], - [`A of T1 & .. & Tn] when [b] is [false] and [l] is [[T1;...Tn]], - [`A of & T1 & .. & Tn] when [b] is [true] and [l] is [[T1;...Tn]]. - The [bool] field is true if the tag contains a constant (empty) constructor. - [&] occurs when several types are used for the same constructor (see 4.2 in the manual)   L V@@@@@@@o@(Rinherit @@@ |@@ W Y 1@+ [[ | t ]]  W r W @@@@@@@*p@@@A@@@@@ B@@@ ?@#NN@#@гPQ"#@гST*+@@Z %@@@` & @@гV$bool56@@^ 0@@г[$list?W@г_)core_typeG H@@g B@@@l Cb@@@@d<[ba@aa@@@a@a@#]]Z W [[ W c@I@г_)core_typed W g @@f ^ @@@@cWvba@aa@@@a@a@@A@ @+  u  v  @@;@@(pof_desc@@ @@@ }    @@q@'pof_loc@@!t@@@     @@r@.pof_attributes@@ ,@@@     @@s@@@A@@@@@ @@@ @#''"  @!@@Ш@г*1object_field_desc    @@2 @@5@@ ~ @1@#--&  @%@@Ш@г0(Location    @7    @@@? @@B@@  @<@#883  @2@@Ш@г;*attributes    @@C Ӱ@@F@@  @B@@A@ @+     !@@;@@$Otagr#locw%label@@@ @@@  w@@@ @@! ! ! !,@@t@(Oinherit @@@ @@ !-!/ '@@"u@@@A@@@@@ *@@@ '@#((! !! !@@г*+! !! ! @г-."! !#! !@@4@@@: @@г0)core_type-! !#1@@7'2@@@@4@#003!-!14!-!9@*@г2)core_type=!-!= Z@@97 [@@@@6@@A@ ]@+ [ [C!]!aD!]!h@@;@@)ppat_desc@@ R@@@ P!q!vQ!q!@@iv@(ppat_loc@@!t@@@ ^!!_!!@@ww@.ppat_loc_stack@@@@@ j!!k!!@@x@/ppat_attributes@@@@@ v!!w!!@i7 [... [\@id1] [\@id2]] !!!"@@@@@@@y@@@A@@@@@  @@ @#AA<!q!@;@@Ш@гD,pattern_desc!q!!q!@@L@@O@@ @K@#GG@!!@?@@Ш@гJ(Location!!!!@Q!!!!@@@Y@@\@@ @V@#RRM!!@L@@Ш@гU.location_stack!!!!@@]@@`@@ @\@#XXS!!@D@@Ш@г[*attributes!!!!@@cͰ@@f@@ @b琠`_@__@@@_@_@@A@ 򐠠  @  @@@ @ @+  """"&@@;@@(Ppat_any@@")"+")"5@2 The pattern [_].  ")"7 ")"N@@@@@@@"z@(Ppat_var#loc@@@ @@@ @@"O"Q"O"i@ A variable pattern such as [x] +"O"k,"O"@@@@@@@D{@*Ppat_aliasQ@@@ #loc@@@ @@@ @@D""E""@7 $ An alias pattern such as [P as 'a] R""S""@@@@@@@k|@-Ppat_constant@@@ @@`""a"#@S @ Patterns such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n] n## o##Q@@@@@@@}@-Ppat_interval@@@ @@@ @@#R#T#R#z@t Patterns such as ['a'..'z']. Other forms of interval are recognized by the parser but rejected by the type-checker. #{##$@@@@@@@~@*Ppat_tuple@u@@@ @@@ @@@@ @@ @@@ 8+closed_flag@@@ @@$$$$Z@  [Ppat_tuple(pl, Closed)] represents - [(P1, ..., Pn)] when [pl] is [(None, P1); ...; (None, Pn)] - [(~L1:P1, ..., ~Ln:Pn)] when [pl] is [(Some L1, P1); ...; (Some Ln, Pn)] - A mix, e.g. [(~L1:P1, P2)] when [pl] is [(Some L1, P1); (None, P2)] [Ppat_tuple(pl, Open)] is similar, but indicates the pattern additionally ends in a [..]. Invariant: - If Closed, [n >= 2]. - If Open, [n >= 1]. $[$a&d&l@@@@@@@@.Ppat_constructV#loc7!t@@@ @@@ B@go#loc@@@ @@@ @@@ @@@@ @@ @@@ @@&m&o&m&@ g [Ppat_construct(C, args)] represents: - [C] when [args] is [None], - [C P] when [args] is [Some ([], P)] - [C (P1, ..., Pn)] when [args] is [Some ([], Ppat_tuple [P1; ...; Pn])] - [C (type a b) P] when [args] is [Some ([a; b], P)]   && ((*@@@@@@@"@,Ppat_variant %label@@@ ~9@@@ @@@ @@"(+(-#(+(U@ [Ppat_variant(`A, pat)] represents: - [`A] when [pat] is [None], - [`A P] when [pat] is [Some P] 0(V(\1((@@@@@@@I@+Ppat_record @#loc!t@@@ @@@ @l@@@ @@ @@@ +closed_flag@@@ @@[((\()(@N B [Ppat_record([(l1, P1) ; ... ; (ln, Pn)], flag)] represents: - [{ l1=P1; ...; ln=Pn }] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]} - [{ l1=P1; ...; ln=Pn; _}] when [flag] is {{!Asttypes.closed_flag.Open}[Open]} Invariant: [n > 0] i)))/j*k*v@@@@@@@@*Ppat_array @@@ @@@ @@|*w*y}*w*@o= Pattern [[| P1; ...; Pn |]] *w**w*@@@@@@@@'Ppat_or @@@ Ġ@@@ @@****@3 Pattern [P1 | P2] ****@@@@@@@@/Ppat_constraint @@@ Ơ9@@@ @@ ** *+@3 Pattern [(P : T)]  *+! *+9@@@@@@@@)Ppat_type\#loc =!t@@@ @@@ @@!+:+<!+:+Z@Ր3 Pattern [#tconst] !+:+\!+:+t@@@@@@@ @)Ppat_lazy@@@ @@"+u+w"+u+@񐠠2 Pattern [lazy P]  "+u+ "+u+@@@@@@@%@+Ppat_unpack#loc@@@ @@@ @@@ @@%#++&#++@  [Ppat_unpack(s)] represents: - [(module P)] when [s] is [Some "P"] - [(module _)] when [s] is [None] Note: [(module P : S)] is represented as [Ppat_constraint(Ppat_unpack(Some "P"), Ptyp_package S)] 3$++4*,,@@@@@@@L@.Ppat_exceptionY@@@ @@A+,,B+,,@47 Pattern [exception P] O+,,P+,-@@@@@@@h@+Ppat_effectu@@@ Ҡz@@@ @@b,--c,--8@@{@.Ppat_extension@@@ @@p--T-Vq--T-s@c1 Pattern [[%id]] ~--T-u--T-@@@@@@@@)Ppat_open#loc !t@@@ @@@ נ@@@ @@.--@1 Pattern [M.(P)] .--.--@@@@@@@@@@A@@@@@@@@@#")"-@@@@@@@@@@#"O"S"O"[@@г"O"f@г&string"O"_"O"e@@˰@@@̰@@@@䐠@@@@@@#""""@@г'pattern""""@@@@г""@г&string""""@@@@@@@@@@@@@@@#""""@@г(constant""@@@@@@-@@@@@@#,#R#V-#R#c@@г(constant6#R#g7#R#o@@1@@г(constant@#R#r@@:@@@@ 3R@@@@@@#Q$$R$$!@@г$list[$$?\$$C@В@г &optionh$$-i$$3@гǠ&stringq$$&r$$,@@l@@@m @@@г̠'pattern}$$6~$$=@@x@@@y@@@z$$%'@@гӠ(Asttypes$$F$$N@ڰ$$O@@@@@@@ܠ@@@@@@#ՠհ&m&q&m&@@гנذ&m&&m&@гڠ)Longident&m&&m&@&m&&m&@@@@@@ @@г䠐&option&m&@В@г蠐$list&m&&m&@г&m&&m&@г&string&m&&m&@@ް@@@߰ @@@@@@г'pattern&m&&m&@@@@@@@@&m&@@@@@@@@@@#(+(/(+(;@@г(+(?(+(D@@ @@г&option(+(O@г'pattern (+(G!(+(N@@@@@ @@@@4@@@@@@#3((4((@@г$list=()>()@В@гI()J() @г)LongidentT((U()@ X()Y()@@@T@@@U @@@г'patterne() f()@@`@@@+a@@@0bj((-@@гq()@@k@@@@d@@@@@@#*w*{*w*@@г$list*w*@г'pattern*w**w*@@ @@@%@@@@@@@@@@#****@@г'pattern****@@ @@г'pattern**@@$@@@@!͐@@@@@@# ** *+@@г'pattern *+  *+@@$Ѱ@@г!)core_type *+"@@(ڰ#@@@@%򐠠#"@""@@@"@"@#!+:+>!+:+G@@г !!+:+W@г")Longident!+:+K!+:+T@)!+:+U !+:+V@@@1@@@7 *@@@@,*)@))@@@)@)@#%%"+u+y"+u+@@г''pattern&"+u+(@@. )@@@@+8)(@((@@@(@(@#$$7#++8#++@@г&'@#++@г(&optionH#++I#++@г-&stringQ#++R#++@@5L@@@:M @@@@N0@@@@2Gf0/@//@@@/@/@#++e+,,f+,,@@г-'patterno+,,.@@4i/@@@@1b/.@..@@@.@.@#**,--,--#@@г,'pattern,--',--.@@4@@г1'pattern,--12@@83@@@@5@#11--T-X--T-f@@г3)extension--T-j4@@:5@@@@754@44@@@4@4@#00.--.--@@г23.--.--@г5)Longident.--.--@<.--.--@@@Dɰ@@@Jʰ @@г?'pattern.--@@FӰ@@@@C될BA@AA@@@A@A@@A@@+2--2--@@;@@)pexp_desc@@@@@ ٰ4.. 4..%@@@(pexp_loc@@U!t@@@ ܰ5.&.+5.&.@@@@.pexp_loc_stack@@@@@ ߰6.A.F6.A.e@@*@/pexp_attributes@@@@@ 7.f.k7.f.@7 [... [\@id1] [\@id2]] +7.f.,7.f.@@@@@@@D@@@A@@@@@&#@@@#AA<34..@;@@Ш@гD/expression_desc<4..=4..$@@L7@@O@@ :@K@#GG@E5.&.3@?@@Ш@гJ(LocationP5.&.5Q5.&.=@QT5.&.>U5.&.?@@@YP@@\@@ S@V@#RRM^6.A.T@L@@Ш@гU.location_stackg6.A.Vh6.A.d@@]b@@`@@ e@\@#XXSp7.f.z@D@@Ш@г[*attributesy7.f.|z7.f.@@ct@@f@@ w@bo`_@__@@@_@_@@A@~@~~@@@~@~@+||:..:..@@;@@*Pexp_ident)#loc !t@@@ @@@ @@;..;..@ , Identifiers such as [x] and [M.x] <..=//@@@@@@@@-Pexp_constant:@@@ @@>//>//:@ X Expressions constant such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n] ?/;/A@//@@@@@@@@(Pexp_leti(rec_flag@@@ kc@@@ @@@ @@@ @@A//A//@ꐠ O [Pexp_let(flag, [(P1,E1) ; ... ; (Pn,En)], E)] represents: - [let P1 = E1 and ... and Pn = EN in E] when [flag] is {{!Asttypes.rec_flag.Nonrecursive}[Nonrecursive]}, - [let rec P1 = E1 and ... and Pn = EN in E] when [flag] is {{!Asttypes.rec_flag.Recursive}[Recursive]}. B//G1)14@@@@@@@@-Pexp_function@@@ @@@ ~@@@ @@@ @@@ @@'H1517(I1J1@  [Pexp_function ([P1; ...; Pn], C, body)] represents any construct involving [fun] or [function], including: - [fun P1 ... Pn -> E] when [body = Pfunction_body E] - [fun P1 ... Pn -> function p1 -> e1 | ... | pm -> em] when [body = Pfunction_cases [ p1 -> e1; ...; pm -> em ]] [C] represents a type constraint or coercion placed immediately before the arrow, e.g. [fun P1 ... Pn : ty -> ...] when [C = Some (Pconstraint ty)]. A function must have parameters: in [Pexp_function (params, _, body)], if [params] does not contain a [Pparam_val _], [body] must be [Pfunction_cases _]. 5J116W44@@@@@@@N@*Pexp_apply=@@@ Ơ@)arg_label@@@ @Q@@@ @@ @@@ @@XX44YX44Y@K  [Pexp_apply(E0, [(l1, E1) ; ... ; (ln, En)])] represents [E0 ~l1:E1 ... ~ln:En] [li] can be {{!Asttypes.arg_label.Nolabel}[Nolabel]} (non labeled argument), {{!Asttypes.arg_label.Labelled}[Labelled]} (labelled arguments) or {{!Asttypes.arg_label.Optional}[Optional]} (optional argument). Invariant: [n > 0] fY4Z4`gb55@@@@@@@@*Pexp_matchn@@@ Y@@@ @@@ @@~c55c56@q + [match E0 with P1 -> E1 | ... | Pn -> En] d66#d66S@@@@@@@@(Pexp_try@@@ @@@ @@@ @@e6T6Ve6T6z@ ) [try E0 with P1 -> E1 | ... | Pn -> En] f6{6f6{6@@@@@@@@*Pexp_tuple >@)@@@ @@@ @@@@ @@ @@@ @@g66g66@ǐ \ [Pexp_tuple(el)] represents - [(E1, ..., En)] when [el] is [(None, E1); ...; (None, En)] - [(~L1:E1, ..., ~Ln:En)] when [el] is [(Some L1, E1); ...; (Some Ln, En)] - A mix, e.g., [(~L1:E1, E2)] when [el] is [(Some L1, E1); (None, E2)] Invariant: [n >= 2] h66q8A8K@@@@@@@@.Pexp_construct!r#locS!t@@@ @@@ ^@@@ @@@ @@r8L8Nr8L8@ [Pexp_construct(C, exp)] represents: - [C] when [exp] is [None], - [C E] when [exp] is [Some E], - [C (E1, ..., En)] when [exp] is [Some (Pexp_tuple[E1;...;En])] s88w9m9w@@@@@@@)@,Pexp_variant"%label@@@ "@@@ @@@ @@)x9x9z*x9x9@ [Pexp_variant(`A, exp)] represents - [`A] when [exp] is [None] - [`A E] when [exp] is [Some E] 7y998|:):4@@@@@@@P@+Pexp_record#à@#loc!t@@@ @@@ @U@@@ @@ @@@  _@@@ @@@ @@f}:5:7g}:5:@Y [Pexp_record([(l1,P1) ; ... ; (ln,Pn)], exp0)] represents - [{ l1=P1; ...; ln=Pn }] when [exp0] is [None] - [{ E0 with l1=P1; ...; ln=Pn }] when [exp0] is [Some E0] Invariant: [n > 0] t~::u;n;y@@@@@@@@*Pexp_field$|@@@  #loc!t@@@ @@@ !@@;z;|;z;@' [E.l] ;z;;z;@@@@@@@@-Pexp_setfield%@@@ "2#loc!t@@@ #@@@ %@@@ &@@;;;;@. [E1.l <- E2] ;;;<@@@@@@@@*Pexp_array&W@@@ '@@@ )@@<<<<1@ѐ5 [[| E1; ...; En |]] <<3<7 [while E1 do E2 done] Y<=Z<=;@@@@@@@r@(Pexp_for*@@@ 3f@@@ 4k@@@ 5.direction_flag@@@ 6v@@@ 7@@|=<=>}=<=@o 5 [Pexp_for(i, E1, E2, direction, E3)] represents: - [for i = E1 to E2 do E3 done] when [direction] is {{!Asttypes.direction_flag.Upto}[Upto]} - [for i = E1 downto E2 do E3 done] when [direction] is {{!Asttypes.direction_flag.Downto}[Downto]} ==>>@@@@@@@@/Pexp_constraint+@@@ 8@@@ 9@@>>>>@+ [(E : T)] >>>? @@@@@@@@+Pexp_coerce,@@@ :=@@@ ;@@@ =C@@@ >@@? ?? ?I@ [Pexp_coerce(E, from, T)] represents - [(E :> T)] when [from] is [None], - [(E : T0 :> T)] when [from] is [Some T0]. ?J?P??@@@@@@@@)Pexp_send-@@@ ?k#locp%label@@@ @@@@ B@@???@@㐠) [E # m] ?@?@)@@@@@@@@(Pexp_new.#loco!t@@@ C@@@ E@@@*@,@*@I@+ [new M.c] "@*@K#@*@[@@@@@@@;@/Pexp_setinstvar/#loc%label@@@ F@@@ H6@@@ I@@<@\@^=@\@@/* [x <- 2] J@\@K@\@@@@@@@@c@-Pexp_override0֠@#loc%label@@@ J@@@ L@g@@@ M@@ N@@@ P@@n@@o@@@a? [{< x1 = E1; ...; xn = En >}] |@@}@@@@@@@@@@0Pexp_struct_item1@@@ Q@@@ R@@@@@A,@/ [let SI in E] A-A3A-AG@@@@@@@@+Pexp_assert2@@@ S@@AHAJAHAe@ j [assert E]. Note: [assert false] is treated in a special way by the type-checker. AfAlAA@@@@@@@@)Pexp_lazy3@@@ T@@AAAA@* [lazy E] AAAB@@@@@@@@)Pexp_poly4@@@ UIg@@@ V@@@ X@@B B B B7@ Used for method bodies. Can only be used as the expression under {{!class_field_kind.Cfk_concrete}[Cfk_concrete]} for methods (not values). B8B>BB@@@@@@@@+Pexp_object56@@@ Y@@ BB BC@2 [object ... end] BCBC.@@@@@@@0@,Pexp_newtype6#loc@@@ Z@@@ \*@@@ ]@@0C/C11C/CZ@#5 [fun (type t) -> E] >C/C\?C/Cv@@@@@@@W@)Pexp_pack7@@@ ^@@@ _@@@ a@@VCwCyWCwC@I % [(module ME)] or [(module ME : S)]. dCCeCC@@@@@@@}@*Pexp_letop88@@@ b@@rCCsCC@e I - [let* P = E0 in E1] - [let* P0 = E00 and* P1 = E01 in E1] CCDDG@@@@@@@@.Pexp_extension9;@@@ c@@DHDJDHDg@) [[%id]] DHDiDHDw@@@@@@@@0Pexp_unreachable:@@DxDz@% [.] DxDDxD@@@@@@@@@@A@@@@@@@@@#;..;..@@г;..@г)Longident;..;..@%;..;..@@@-Ͱ@@@3ΰ &@@@@(搠&%@%%@@@%@%@#!!>//!>//.@ @г#(constant>//2$@@*%@@@@'%$@$$@@@$@$@#  A//A//@@г"# A// A//@@)@@г%$listA//A//@г*-value_bindingA//A//@@2@@@7 @@г/*expression'A//0@@6!1@@@@3910@00@@@0@0@#,,8H15199H151F@@г.$listBI1J1_CI1J1c@г3.function_paramKI1J1PLI1J1^@@;F@@@@G @@г8&optionVI1J1vWI1J1|@г=/type_constraint_I1J1f`I1J1u@@EZ@@@J[ @@гB-function_bodyjI1J1C@@IdD@@@@F]|DC@CC@@@C@C@#??{X44!|X44+@@гA*expressionX44/X449@@I@@гF$listX44U7@В@гJKX44=X44F@@Q@@@гM*expressionX44IX44S@@U@@@a@@@fX44<R@@@@TRQ@QQ@@@Q@Q@#MMc55c56@.@гO*expressionc56c56@@W@@гT$listc56P@гX$casec56c56@@`Ѱ@@@eҰ[@@@@]ꐠ[Z@ZZ@@@Z@Z@#VVe6T6Xe6T6`@7@гX*expressione6T6de6T6n@@`@@г]$liste6T6vY@гa$case e6T6q e6T6u@@i@@@nd@@@@f dc@cc@@@c@c@#__ g66 g66@6@гa$list "g66N@В@гe&option .g66 /g66@гj&string 7g66 8g66@@r2@@@w3 @@@гo*expression Cg66 Dg66@@w>@@@?@@@@ Hg66t@@@@v: Yts@ss@@@s@s@#oo Xr8L8P Yr8L8^@H@гqr ar8L8n br8L8q@гt)Longident lr8L8b mr8L8k@{ pr8L8l qr8L8m@@@l@@@m @@г~&option |r8L8z@г*expression r8L8t r8L8~@@@@@@@@@y @@@@@@# x9x9| x9x9@`@г x9x9 x9x9@@@@г&option x9x9@г*expression x9x9 x9x9@@@@@@@@@ Ɛ@@@@@@# }:5:9 }:5:D@Q@г$list }:5:g }:5:k@В@г }:5:U }:5:X@г)Longident }:5:I }:5:R@ }:5:S }:5:T@@@@@@ @@@г*expression }:5:[ }:5:e@@@@@@@@ }:5:H-@@г&option!}:5:y@г*expression! }:5:n! }:5:x@@@@@@@@@! @@@@@@#!;z;~! ;z;@@г*expression!);z;!*;z;@@$@@г!2;z;@г)Longident!<;z;!=;z;@!@;z;!A;z;@@@<@@@= @@@@6!U@@@@@@#!T;;!U;;@@г*expression!^;;!_;;@@Y@@г!g;;!h;;@г)Longident!r;;!s;;@!v;;!w;;@@@r@@@s @@гĠ*expression!;;@@|@@@@Ƞu!@@@@@@#!<<!<<@@гà$list!<<-@гǠ*expression!<<"!<<,@@@@@@@@@̠!@@@@@@#ŠŰ!>"~>>@@г*expression">>">>@@@@г)core_type">>@@@@@@ "@@@@@@#"? ?"? ?@@г*expression"? ? "? ?*@@@@г&option"? ?7"? ?=@г)core_type"? ?-"? ?6@@@@@  @@г)core_type"? ?@@@İ@@@@ "ܐ@@@@@@#"??"??@@г*expression"?@"?@ @@@@г"?@@г"?@"?@@@@@@@@@@  # @@@@@@##@*@.# @*@6@@г#@*@F@г)Longident#@*@:#@*@C@#@*@D# @*@E@@@@@@ @@@@!#4@@@@@@#  #3@\@`#4@\@o@@г  #<@\@y#=@\@|@г#D@\@s#E@\@x@@?@@@@ @@г*expression#O@\@@@I@@@@!B#a@@@@@@##`@@#a@@@@г$list#j@@@В@г#u@@#v@@@г#}@@#~@@@@x@@@%y @@@г*expression#@@#@@@@#@@@5@@@:#@@ @@@@"!# @@@@@@##@@#@A @@г.structure_item#@A#@A@@%@@г"*expression#@A"#@@)$@@@@&!#Đ$#@##@@@#@#@##AHAL#AHAW@ @г!*expression#AHA["@@(ǰ#@@@@%!#ߐ#"@""@@@"@"@##AA#AA@ @г *expression#AA!@@'"@@@@$!#"!@!!@@@!@!@##B B #B B@@г*expression$B B$B B$@@'@@г$&option$ B B1 @г()core_type$B B'$B B0@@0 @@@5 +@@@@-" $)+*@**@@@*@*@#&&$(BB$)BC@@г(/class_structure$2BC)@@/ ,*@@@@,"%$D*)@))@@@)@)@#%%$CC/C3$DC/C?@@г'($LC/CJ$MC/CM@г*&string$UC/CC$VC/CI@@2 P@@@8 Q @@г/*expression$`C/CP0@@6 Z1@@@@3"S$r10@00@@@0@0@#,,$qCwC{$rCwC@ @г.+module_expr${CwC$|CwC@@6 v@@г3&option$CwC/@г7,package_type$CwC$CwC@@? @@@D :@@@@<"$:9@99@@@9@9@#55$CC$CC@ @г7%letop$CC8@@> 9@@@@;"$98@88@@@8@8@#44$DHDL$DHDZ@@г6)extension$DHD^7@@= 8@@@@:"$א87@77@@@7@7@#33$DxD|@#@@@4"$萠32@22@@@2@2@@A@@+àð$DD$DD@@;@@&pc_lhs;@@ @@@ d$DD$DD@@% @(pc_guard<@@$a@@@ g@@@ i%DD%DD@@%@&pc_rhs=@@ @@@ l%DD%DD@@%*@@@A@@@@@@@@#**%%DD@$@@Ш@г-'pattern%"DD%#DD@@5!@@8@@ e! @4@#00&%+DD@%@@Ш@г3&option%4DD%5DD@г8*expression%=DD%>DD@@@!8@@@E!9 @@H@@ j!<@?@#;;6%GDD@5@@Ш@г>*expression%PDD%QDD@@F!K@@I@@ m!N@E@@A@ /#F%e - ,@ , ,@@@ ,@ ,@+ * *%dELEP%eELEU@@;@@$let_>@@ /@@@ o%qE\E`%rE\Er@@%@$ands?@@$ ?@@@ r@@@ t%EsEw%EsE@@%@$body@@@ @@@ w%EE%EE@@%@@@A@@@@@ U@@@ R@#**%%E\Ed@$@@Ш@г-*binding_op%E\Eg%E\Eq@@5!@@8@@ p!@4@#00&%EsE{@%@@Ш@г3$list%EsE%EsE@г8*binding_op%EsE~%EsE@@@!@@@E! @@H@@ u!@?@#;;6%EE@5@@Ш@г>*expression%EE%EE@@F!Ȱ@@I@@ x!@E@@A@ @+  %EE%EE@@;@@'pbop_opA@@$e#loc%@@@ z@@@ |%EE%EE@@&@(pbop_patB@@! @@@ %EE%EE@@&@(pbop_expC@@ @@@ &EE&EF @@&@(pbop_locD@@$_!t@@@ &F F&F F'@@&(@@@A@@@@@ @@@ @#99.&EE@-@@Ш@г<=&EE& EE@г?&string&(EE&)EE@@G"#@@@M"$ @@P@@ }"'@F@#BB=&2EE@<@@Ш@гE'pattern&;EE&<EE@@M"6@@P@@ "9@L@#HHC&DEE@B@@Ш@гK*expression&MEF&NEF @@S"H@@V@@ "K@R@#NNG&VF F@F@@Ш@гQ(Location&aF F&bF F$@X&eF F%&fF F&@@@`"a@@c@@ "d@]@@A@!'@+!%!%&oF-F1&pF-FD@@;@@*Pparam_valE%)arg_label@@@ %!@@@ @@@ !@@@ @@&FGFI&FGF@$ \ [Pparam_val (lbl, exp0, P)] represents the parameter: - [P] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]} and [exp0] is [None] - [~l:P] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]} and [exp0] is [None] - [?l:P] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [None] - [?l:(P = E0)] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [Some E0] Note: If [E0] is provided, only {{!Asttypes.arg_label.Optional}[Optional]} is allowed. &FF&HH@@@@@@@&@.Pparam_newtypeF%,#loc&{@@@ @@@ @@&HH!c@$ N [Pparam_newtype x] represents the parameter [(type x)]. [x] carries the location of the identifier, whereas the [pparam_loc] on the enclosing [function_param] node is the location of the [(type x)] as a whole. Multiple parameters [(type a b c)] are represented as multiple [Pparam_newtype] nodes, let's say: {[ [ { pparam_kind = Pparam_newtype a; pparam_loc = loc1 }; { pparam_kind = Pparam_newtype b; pparam_loc = loc2 }; { pparam_kind = Pparam_newtype c; pparam_loc = loc3 }; ] ]} Here, the first loc [loc1] is the location of [(type a b c)], and the subsequent locs [loc2] and [loc3] are the same as [loc1], except marked as ghost locations. The locations on [a], [b], [c], correspond to the variables [a], [b], and [c] in the source code. &II&LWL[@@@@@@@&@@@A@@@@@!t@@@!q@#NN&FGFK&FGFU@)@гPQ&FGFY&FGFb@@W"ɰ@@гS&option&FGFp&FGFv@гX*expression&FGFe&FGFo@@`"ܰ@@@e"ݰ @@г]'pattern&FGFy^@@d"_@@@@a$&_^@^^@@@^@^@#ZZ&HH&HH@@@г\]'HI!@г^&string'HH'HI@@f# @@@l# !@@@@c%'"ba@aa@@@a@a@@A@!@+!Ϡ!ϰ'!L]La'"L]Lo@@;@@*pparam_locG@@%!t@@@ '0LrLv'1LrL@@'I@+pparam_descH@@!@@@ '<LL'=LL@@'U@@@A@@@@@!@@@!@#'DLrL@@@Ш@г(Location'OLrL'PLrL@%'SLrL'TLrL@@@-#O@@0@@ #R@*@#&&!']LL@ @@Ш@г)3function_param_desc'fLL'gLL@@1#a@@4@@ #d@0@@A@"@+""'oLL'pLL@@;@@.Pfunction_bodyI"x@@@ @@'~LL'LL@@'@/Pfunction_casesJ' "l@@@ @@@ %!t@@@ #-@@@ @@'LL"@@%  In [Pfunction_cases (_, loc, attrs)], the location extends from the start of the [function] keyword to the end of the last case. The compiler will only use typechecking-related attributes from [attrs], e.g. enabling or disabling a warning. 'M+M-'N3N7@@@@@@@'@@@A@@@@@"Q"N@@"@@#;;'LL'LL@4@г=*expression'LL>@@D#?@@@@A@#=='LL'LM@@г?$list'LM 'LM@гD$case'LM'LM @@L#а@@@Q#Ѱ @@гI(Location'LM'LM@P'LM'LM@@@X#@@гS*attributes'LM "@@Z#"@@@@W%(VU@UU@@@U@U@@A@"%(""@""@@@"@"@+""( NN(NN@@;@@+PconstraintK#@@@ @@(NN(NN@@(5@'PcoerceL'#@@@ @@@ #@@@ @@(4NN"@&& G See the comment on {{!expression_desc.Pexp_function}[Pexp_function]}. (ANN(BNO1@@@@@@@(Z@@@A@@@@@"@@@"@#44(INN(JNN@-@г6)core_type(SNN7@@=$M8@@@@:@#66(YNN(ZNN@@г8&option(cNN(dNN@г=)core_type(lNN(mNN@@E$g@@@J$h @@гB)core_type(wNN#@@I$q#@@@@F&j(ED@DD@@@D@D@@A@#@+##( OROV( OROg@@;@@)pval_nameM@@'#loc(f@@@ @@@ ( OpOu( OpO@@(@)pval_typeN@@$"@@@ (OO(OO@@(@)pval_primO@@(1(@@@ @@@ (OO(OO@@(@/pval_attributesP@@$T@@@ (OO(OO@&; [... [\@\@id1] [\@\@id2]] (OO(OP@@@@@@@(@(pval_locQ@@'0!t@@@ (PP (PP"@@(@@@A@@@@@#i#f@@#J@#XXM( OpO~@L@@Ш@г[\( OpO( OpO@г^&string( OpO( OpO@@f$@@@l$ @@o@@ $@e@#aa\)OO@[@@Ш@гd)core_type) OO) OO@@l%@@o@@ % @k@#gg])OO@\@@Ш@гj$list)OO)OO@гo&string)'OO)(OO@@w%"@@@|%# @@@@ %&@v@#rrm)1OO@^@@Ш@гu*attributes):OO);OO@@}%5@@@@ %8@|'0)Ozy@yy@@@y@y@#uun)NPP@m@@Ш@гx(Location)YPP)ZPP@)]PP )^PP!@@@%Y@@@@ %\@@@A@#頰)t)s##@##@@@#@#栰'_)~##@##@@@#@#@+##)}QMQQ)~QMQa@@;@@*ptype_nameR@@( #loc)[@@@ @@@ )QjQo)QjQ@@)@,ptype_paramsS@@)@%@@@ @@(0(variance@@@  @(7+injectivity@@@ @@ @@ @@@ ǰ)QQ)QQ@'2 [('a1,...'an) t] ) QQ) QQ@@@@@@@)@+ptype_cstrsT@@)O@%T@@@ ʠ@%Z@@@ ˠ@(7!t@@@ @@ @@@ ϰ)!QQ)!QR!@'ې 0 [... constraint T1=T1' ... constraint Tn=Tn'] )"R"R()"R"R]@@@@@@@*@*ptype_kindU@@$B@@@ Ұ*#R^Rc*#R^Ry@@*@-ptype_privateV@@(,private_flag@@@ հ*$RzR*$RzR@(5 for [= private ...] *$RzR*$RzR@@@@@@@*6@.ptype_manifestW@@)%@@@ @@@ ڰ*.%RR*/%RR@(!2 represents [= T] *<%RR*=%RR@@@@@@@*U@0ptype_attributesX@@%@@@ ݰ*H&RR*I&RS@(;; [... [\@\@id1] [\@\@id2]] *V&RS*W&RS<@@@@@@@*o@)ptype_locY@@(!t@@@ *d'S=SB*e'S=SX@@*}@@@A@@@@@$$@@$@#*lQjQy@@@Ш@гꠐ*tQjQ*uQjQ@г&string*}QjQ{*~QjQ@@&x@@@&y @@@@ &|@@#*QQ@@@Ш@г$list*QQ*QQ@В@г)core_type*QQ*QQ@@&@@@В@г*QQ*QQ@@&@@@г*QQ*QQ@@&@@@&@@@&*QQ@@@$&*QQ,@@(@@ &@ (*ϐ@@@@@@#*!QQ@@@Ш@г$list*!QR*!QR @В@г )core_type*!QQ*!QR@@&߰@@@г)core_type*!QR*!QR @@&@@@г(Location*!QR*!QR@+!QR+!QR@@@#&@@@4&!@@@9&+!QQ/@@=@@ '@"(+ @@@@@@#+#R^Rm@@@Ш@г)type_kind+!#R^Ro+"#R^Rx@@&'@@)@@ '@%@#!!+*$RzR@ @@Ш@г$%+2$RzR+3$RzR@@+'-@@.@@ '0@))(+G'&@&&@@@&@&@#""+F%RR@ @@Ш@г%&option+O%RR+P%RR@г*)core_type+X%RR+Y%RR@@2'S@@@7'T @@:@@ 'W@1)O+n/.@..@@@.@.@#**%+m&RS @@@Ш@г-*attributes+v&RS+w&RS@@5'q@@8@@ 't@4)l+21@11@@@1@1@#--&+'S=SK@%@@Ш@г0(Location+'S=SM+'S=SU@7+'S=SV+'S=SW@@@?'@@B@@ '@<@@A@&++%%@%%@@@%@%)+%%@%%@@@%@%@+%%+CXX+CXX@@;@@.Ptype_abstractZ@@+DX X"+DX X2@@+@-Ptype_variant[+O%@@@ @@@ @@+EX3X5+EX3Xd@@+@,Ptype_record\+b& @@@ @@@ @@+FXeXg+FXeX@)ܐ; Invariant: non-empty list +FXeX+FXeX@@@@@@@,@*Ptype_open]@@,GXX&=@@,@@@A@@@@@&@@@@&=@#FF,DX X$D@C@@@G@#CC, EX3X7,EX3XD@7@гE$list,EX3X`A@гI7constructor_declaration,EX3XH, EX3X_@@Q(@@@V(L@@@@N@#JJ,'FXeXi,(FXeXu@0@гL$list,1FXeXH@гP1label_declaration,9FXeXy,:FXeX@@X(4@@@](5S@@@@U*.,MSR@RR@@@R@R@#NN,LGXX&@L@@@O@@A@&@+&&,RIXX,SIXX@@;@@(pld_name^@@*#loc,0@@@ @@@ ,eKXX,fKXX@@,~@+pld_mutable_@@*,mutable_flag@@@ ,rLXY,sLXY@@,@(pld_type`@@'@@@ ,~MYY ,MYY4@@,@'pld_loca@@*!t@@@ ,NY5Y:,NY5YN@@,@.pld_attributesb@@((@@@ ,OYOYT,OYOYo@*9 [l : T [\@id1] [\@id2]] ,OYOYq,OYOY@@@@@@@,@@@A@@@@@&&@@&@#TTI,KXX@H@@Ш@гWX,KXX,KXX@гZ&string,KXX,KXX@@b(@@@h( @@k@@ (@a@#]]W,LXY @V@@Ш@г`a,LXY ,LXY@@g(̰@@j@@ (@e@#aa\,MYY(@[@@Ш@гd)core_type,MYY*,MYY3@@l(ް@@o@@ (@k@#gg`,NY5YA@_@@Ш@гj(Location,NY5YC,NY5YK@q,NY5YL,NY5YM@@@y(@@|@@ (@v@#rrm-OYOYb@^@@Ш@гu*attributes-OYOYd-OYOYn@@}) @@@@ ) @|+-#zy@yy@@@y@y@@A@'T+-.'R'Q@'Q'Q@@@'Q@'Q@+'O'O--\[Y[]-.\[Y[t@@;@@(pcd_namec@@+#loc- @@@ @@@ -@^[}[-A^[}[@@-Y@(pcd_varsd@@,ʠ+#loc-!@@@ @@@ @@@ -W_[[-X_[[@@-p@(pcd_argse@@'}@@@ -c`[[-d`[[@@-|@'pcd_resf@@,Р(@@@ @@@ -ta[[-ua[[@@-@'pcd_locg@@+!t@@@ -b[\-b[\@@-@.pcd_attributesh@@)@@@ -c\\-c\\8@+< [C of ... [\@id1] [\@id2]] -c\\:-c\\[@@@@@@@-@@@A@@@@@'@@@'@#ood-^[}[@c@@Ш@гrs-^[}[-^[}[@гu&string-^[}[-^[}[@@})@@@) @@@@ )@|@#xxh-_[[@g@@Ш@г{$list-_[[-_[[@г-_[[-_[[@г&string-_[[-_[[@@)԰@@@)հ @@@)ְ@@@@ )@@#-`[[@@@Ш@г5constructor_arguments-`[[-`[[@@)@@@@ )@@#-a[[@@@Ш@г&option-a[[.a[[@г)core_type.a[[. a[[@@*@@@* @@@@ *@@#.b[\ @@@Ш@г(Location.b[\ .b[\@.!b[\."b[\@@@*@@@@ * @@#.+c\\+@@@Ш@г*attributes.4c\\-.5c\\7@@*/@@@@ *2@,*.I@@@@@@@A@(d@+(b(b.Hf\c\g.If\c\|@@;@@+Pcstr_tuplei-ՠ)@@@ @@@ @@.\g\\.]g\\@@.u@,Pcstr_recordj-(@@@ @@@ "@@.oh\\(@,a  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\\.}u_m_o@@@@@@@.@@@A@@@@@(@@@(@#44.g\\.g\\@(@г6$list.g\\2@г:)core_type.g\\.g\\@@B*@@@G*=@@@@?@#;;.h\\.h\\@"@г=$list.h\\(@гA1label_declaration.h\\.h\\@@I*@@@N*(@@@@F,.ĐED@DD@@@D@D@@A@(@+(ՠ(հ.w_q_u.w_q_@@;@@+ptyext_pathk@@-R#loc#3!t@@@ #@@@ %.y__.y__@@.@-ptyext_paramsl@@.b@*g@@@ (@@-x(variance@@@ )@-+injectivity@@@ *@@ +@@ ,@@@ ..z__/z__@@/@3ptyext_constructorsm@@.) @@@ 1@@@ 3/{__/{_`%@@/)@.ptyext_privaten@@-,private_flag@@@ 6/|`&`+/|`&`H@@/6@*ptyext_loco@@-{!t@@@ 9/+}`I`N/,}`I`e@@/D@1ptyext_attributesp@@*@@@ </7~`f`k/8~`f`@-*9 ... [\@\@id1] [\@\@id2] /E~`f`/F~`f`@@@@@@@/^@@@A@@@@@)X)U@@)G@#u/My__@t@@Ш@г/Uy__/Vy__@г)Longident/`y__/ay__@/dy__/ey__@@@+`@@@+a @@@@ &+d@@#p/oz__@o@@Ш@г$list/xz__/yz__@В@г)core_type/z__/z__@@+@@@В@г/z__/z__@@+@@@г/z__/z__@@+@@@+@@@+/z__@@@+/z__,@@@@ /+@@#/{_`@@@Ш@г$list/{_` /{_`$@г5extension_constructor/{_` /{_`@@+@@@+ @@@@ 4+@@#/|`&`9@@@Ш@г/|`&`;/|`&`G@@+ʰ@@@@ 7+@@#/}`I`X@@@Ш@г(Location/}`I`Z/}`I`b@/}`I`c/}`I`d@@@+@@@@ :+@@#/~`f`|@@@Ш@г *attributes/~`f`~/~`f`@@+@@@@ =+@ɠ-0@@@@@@@A@*-0**@**@@@*@*@+**0aa0aa3@@;@@)pext_nameq@@.#loc/@@@ B@@@ D0,a<aA0-a<aW@@0E@)pext_kindr@@*@@@ G08aXa]09aXa@@0Q@(pext_locs@@.!t@@@ J0Faa0Gaa@@0_@/pext_attributest@@+@@@ M0Raa0Saa@.E< [C of ... [\@id1] [\@id2]] 0`aa0aaa@@@@@@@0y@@@A@@@@@*]@@@*Z@#GG<0ha<aJ@;@@Ш@гJK0pa<aS0qa<aV@гM&string0ya<aL0za<aR@@U,t@@@[,u @@^@@ E,x@T@#PPK0aXaf@J@@Ш@гS:extension_constructor_kind0aXah0aXa@@[,@@^@@ H,@Z@#VVO0aa@N@@Ш@гY(Location0aa0aa@`0aa0aa@@@h,@@k@@ K,@e@#aa\0aa@M@@Ш@гd*attributes0aa0aa@@l,@@o@@ N,@k.0̐ih@hh@@@h@h@@A@*@+**0aa0aa@@;@@2ptyexn_constructoru@@*@@@ S0bb0bb2@@0@*ptyexn_locv@@/6!t@@@ V0b3b70b3bO@@0@1ptyexn_attributesw@@,@@@ Y0bPbT0bPbs@.吠; [... [\@\@id1] [\@\@id2]] 1bPbu1bPb@@@@@@@1@@@A@@@@@**@@*@#5501bb@/@@Ш@г85extension_constructor1bb1bb1@@@- @@C@@ T-@?@#;;41b3bA@3@@Ш@г>(Location1%b3bD1&b3bL@E1)b3bM1*b3bN@@@M-%@@P@@ W-(@J@#FFA13bPbe@2@@Ш@гI*attributes1<bPbh1=bPbr@@Q-7@@T@@ Z-:@P/21QNM@MM@@@M@M@@A@+>/=1\+<+;@+;+;@@@+;@+;@++9+91[bb1\bb@@;@@)Pext_declx0/#loc1?@@@ \@@@ ^@@@ `+@@@ a0,@@@ b@@@ d@@1bb1bc=@/w F [Pext_decl(existentials, c_args, t_opt)] describes a new extension constructor. It can be: - [C of T1 * ... * Tn] when: {ul {- [existentials] is [[]],} {- [c_args] is [[T1; ...; Tn]],} {- [t_opt] is [None]}.} - [C: T0] when {ul {- [existentials] is [[]],} {- [c_args] is [[]],} {- [t_opt] is [Some T0].}} - [C: T1 * ... * Tn -> T0] when {ul {- [existentials] is [[]],} {- [c_args] is [[T1; ...; Tn]],} {- [t_opt] is [Some T0].}} - [C: 'a... . T1 * ... * Tn -> T0] when {ul {- [existentials] is [['a;...]],} {- [c_args] is [[T1; ... ; Tn]],} {- [t_opt] is [Some T0].}} 1c>cD1ff@@@@@@@1@+Pext_rebindy0"#loc&!t@@@ e@@@ g@@1ff+@/ F [Pext_rebind(D)] re-export the constructor [D] with the new name [C] 1ff1fg@@@@@@@1@@@A@@@@@+@@@+@#ZZ1bb1bb@+@г\$list1bc1bc@гab1bc 1bc @гd&string1bc1bc @@l-Ӱ@@@r-԰ @@@w-հ@@гi5constructor_arguments1bc1bc*@@q-߰@@гn&option1bc7j@гr)core_type1bc-1bc6@@z-@@@-u@@@@w/2 ut@tt@@@t@t@#pp2 ff2 ff@T@гrs2ff+@гt)Longident2ff2ff@{2 ff2!ff@@@.@@@. +@@@@~025}|@||@@@|@|@@A@, @+, , 24gPgT25gPg^@@;@@)pcty_descz@@+@@@ h2Agggl2Bggg@@2Z@(pcty_loc{@@0!t@@@ k2Ogg2Pgg@@2h@/pcty_attributes|@@-@@@ n2[gg2\gg@0N7 [... [\@id1] [\@id2]] 2igg2jgg@@@@@@@2@@@A@@@@@,@,=@@,!@#5502qgggu@/@@Ш@г8/class_type_desc2zgggw2{ggg@@@.u@@C@@ i.x@?@#;;42gg@3@@Ш@г>(Location2gg2gg@E2gg2gg@@@M.@@P@@ l.@J@#FFA2gg@2@@Ш@гI*attributes2gg2gg@@Q.@@T@@ o.@P02NM@MM@@@M@M@@A@,22Ő,,@,,@@@,@,22А,,@,,@@@,@,@+,,2gg2gg@@;@@+Pcty_constr}1`#loc'A!t@@@ q@@@ s2i.j@@@ t@@@ v@@2hh2hh3@0㐠 ) - [c] - [['a1, ..., 'an] c] 2h4h:2hDhh@@@@@@@3@.Pcty_signature~,@@@ w@@3 hihk3 hih@02 [object ... end] 3hih3hih@@@@@@@33@*Pcty_arrow1)arg_label@@@ x.@@@ y- @@@ z@@33hh34hh@1& 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]}. 3Ahh3BjIjT@@@@@@@3Z@.Pcty_extension.@@@ {@@3OjUjW3PjUjt@1B' [%id] 3]jUjv3^jUj@@@@@@@3v@)Pcty_open+@@@ |-F@@@ }@@3pjj-@1b4 [let open M in CT] 3}jj3~jj@@@@@@@3@@@A@@@@@-0@@@--@#3hh3hh@@г3hh3hh"@г)Longident3hh3hh@3hh3hh@@@/@@@/ @@г$list3hh/@г)core_type3hh%3hh.@@/@@@/@@@@Ơ13Ő@@@@@@#3hihm3hih{@@г/class_signature3hih@@/Ȱ@@@@Š13@@@@@@#3hh3hh@@г3hh3hh@@/@@гà)core_type3hh3hh@@/@@гȠ*class_type3hh@@/@@@@̠14@@@@@@#ŠŰ4 jUjY4jUjg@@гǠ)extension4jUjk@@0@@@@ˠ2 4)@@@@@@#Ġİ4(jj4)jj@@гƠ0open_description42jj43jj@@0-@@гˠ*class_type4<jj-@@06-@@@@Ϡ2/4N@@@@@@@A@-@+--4Mjj4Njj@@;@@*pcsig_self@@/@@@ ~4Zjj4[jk@@4s@,pcsig_fields@@3-@@@ @@@ 4kkk 4lkk/@@4@@@A@@@@@..@@.@#4sjj@@@Ш@г!)core_type4|jj4}jk@@)0w@@,@@ 0z@(@#$$4kk@@@Ш@г'$list4kk*4kk.@г,0class_type_field4kk4kk)@@40@@@90 @@<@@ 0@3@@A@.E24.C.B@.B.B@@@.B@.B@+.@.@4ll4ll+@@;@@)pctf_desc@@.E@@@ 4l4l94l4lZ@@4@(pctf_loc@@3!t@@@ 4l[l`4l[lu@@4@/pctf_attributes@@0c@@@ 4lvl{4lvl@2Ɛ; [... [\@\@id1] [\@\@id2]] 4lvl4lvl@@@@@@@4@@@A@@@@@.v@@@.s@#5504l4lB@/@@Ш@г85class_type_field_desc4l4lD4l4lY@@@0@@C@@ 0@?@#;;44l[lh@3@@Ш@г>(Location5l[lj5l[lr@E5 l[ls5 l[lt@@@M1@@P@@ 1 @J@#FFA5lvl@2@@Ш@гI*attributes5lvl5lvl@@Q1@@T@@ 1@P352NM@MM@@@M@M@@A@.@+..51ll52ll@@;@@,Pctf_inherit/@@@ @@5@ll5All@33. [inherit CT] 5Nll5Olm@@@@@@@5g@(Pctf_val@3#loc3%label@@@ @@@ @3,mutable_flag@@@ @3,virtual_flag@@@ @0@@@ @@ @@5{mm5|mmV@3n, [val x: T] 5mWm]5mWmn@@@@@@@5@+Pctf_method@4#loc4"%label@@@ @@@ @4*,private_flag@@@ @41,virtual_flag@@@ @11@@@ @@ @@5momq5mom@3 a [method x: T] Note: [T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}. 5mm5nn$@@@@@@@5@/Pctf_constraint@1Q@@@ @1W@@@ @@ @@5n%n'5n%nS@3ϐ6 [constraint T1 = T2] 5n%nU5n%np@@@@@@@6@.Pctf_attribute2O@@@ @@5nqns5nqn@3될. [[\@\@\@id]] 6nqn6nqn@@@@@@@6@.Pctf_extension1@@@ @@6nn/@4* [[%%id]] 6!nn6"nn@@@@@@@6:@@@A@@@@@/@@@/@#6)ll6*ll@@г*class_type63ll@@2-@@@@4&6E@@@@@@#6Dmm6Emm@@В@г6Qmm(6Rmm+@г6Ymm"6Zmm'@@2T@@@2U @@@г6dmm.6emm:@@2_@@@г6nmm=6ommI@@2i@@@г)core_type6ymmL6zmmU@@2t@@@%2u$@@@@4n6@@@@@@#6moms6mom~@@В@г6mom6mom@г6mom6mom@@2@@@2 @@@г6mom6mom@@ 2@@@г6mom6mom@@2@@@г )core_type6mom6mom@@2@@@22$@@@@46Ր @  @@@ @ @#  6n%n)6n%n8@@В@г )core_type6n%n=6n%nF@@2ݰ@@@г)core_type6n%nI6n%nR@@2@@@#2@@@@47@@@@@@#7nqnu7nqn@@г)attribute7 nqn@@3@@@@47@@@@@@#7nn7nn@@г)extension7%nn0@@30@@@@577@@@@@@@A@0@+0076nn77nn@А!a@ 397Ann7Bnn@@BA@; @A(pci_virt@@5,virtual_flag@@@ 7Qnn7Rno@@7j@*pci_params@@6۠@2@@@ @@5(variance@@@ @5+injectivity@@@ @@ @@ @@@ 7xoo7yooM@@7@(pci_name@@6#loc7U@@@ @@@ 7oNoS7oNoh@@7@(pci_expr@@VD@ 7oion7oio{@@7@'pci_loc@@5!t@@@ 7o|o7o|o@@7 @.pci_attributes@@3>@@@ 7oo7oo@5; [... [\@\@id1] [\@\@id2]] 7oo7oo@@@@@@@7 @@@A@Y@@@@@1>1;@@1-@#{{u7no@t@@Ш@г~7no7no@@3ɰ@@@@ 3@@#_7oo@^@@Ш@г$list7ooH7ooL@В@г)core_type7oo"7oo+@@3@@@В@г7oo/7oo7@@3@@@г8oo:8ooE@@4@@@4@@@48 ooF@@@48 oo!,@@@@ 4@@#8oNo[@@@Ш@г8oNod8oNog@г&string8$oNo]8%oNoc@@4@@@4  @@@@ 4#@@#8.oiov@@@Ш@А!a4-85oiox86oioz@@@@ 42@@#8=o|o@@@Ш@г(Location8Ho|o8Io|o@8Lo|o8Mo|o@@@4H@@@@ 4K@@#8Voo@@@Ш@г*attributes8_oo8`oo@@4Z@@@@ 4]@6U8t@@@@@@@A@1젰6`811@11@@@1@1@+118~pp8pp@@;@@5,A2 2a@@@ @@@ @@@@1@@@1@@Aг +class_infos8pp1@г*class_type8pp8pp@@4@@@41@@1@+118pp8pp@@;@@5PA2/2@@@ @@@ @@@@2@@@1@@Aг +class_infos8pq2@г*class_type8pp8pp@@4@@@42@@2@+228qBqF8qBqP@@;@@(pcl_desc@@2@@@ Ű8qYq^8qYqx@@8 @'pcl_loc@@71!t@@@ Ȱ8qyq~8qyq@@8 @.pcl_attributes@@4}@@@ ˰8qq8qq@67 [... [\@id1] [\@id2]] 8qq8qq@@@@@@@9 @@@A@@@@@2G2D@@26@#5509qYqf@/@@Ш@г8/class_expr_desc9 qYqh9 qYqw@@@5@@C@@ 5 @?@#;;49qyq@3@@Ш@г>(Location9 qyq9!qyq@E9$qyq9%qyq@@@M5 @@P@@ 5#@J@#FFA9.qq@2@@Ш@гI*attributes97qq98qq@@Q52@@T@@ 55@P7-9LNM@MM@@@M@M@@A@29X9W22@22@@@2@2@+229Vqq9Wqq@@;@@*Pcl_constr7#loc-!t@@@ @@@ Р84@@@ @@@ @@9wqq9xqr!@7j= [c] and [['a1, ..., 'an] c] 9r"r(9r"rJ@@@@@@@9@-Pcl_structure2@@@ @@9rKrM9rKro@72 [object ... end] 9rKrq9rKr@@@@@@@9@'Pcl_fun81)arg_label@@@ ՠ94@@@ @@@ ؠ4@@@ ٠3@@@ @@9 rr9 rr@7  [Pcl_fun(lbl, exp0, P, CE)] represents: - [fun P -> CE] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]} and [exp0] is [None], - [fun ~l:P -> CE] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]} and [exp0] is [None], - [fun ?l:P -> CE] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [None], - [fun ?l:(P = E0) -> CE] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [Some E0]. 9 rr9uru|@@@@@@@9@)Pcl_apply3+@@@ ۠9c@8o)arg_label@@@ ܠ@4@@@ @@ @@@ @@9u}u9u}u@7萠 [Pcl_apply(CE, [(l1,E1) ; ... ; (ln,En)])] represents [CE ~l1:E1 ... ~ln:En]. [li] can be empty (non labeled argument) or start with [?] (optional argument). Invariant: [n > 0] :uu:vv@@@@@@@:@'Pcl_let8(rec_flag@@@ 91@@@ @@@ 3l@@@ @@:! vv:" vv@8 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]}. :/!vv:0&x;xE@@@@@@@:H@.Pcl_constraint3@@@ 4@@@ @@:B'xFxH:C'xFxs@85- [(CE : CT)] :P'xFxu:Q'xFx@@@@@@@:i@-Pcl_extension6 @@@ @@:^(xx:_(xx@8Q) [[%id]] :l(xx:m(xx@@@@@@@:@(Pcl_open2@@@ 3@@@ @@:)xx3@8q4 [let open M in CE] :)xx:)xx@@@@@@@:@@@A@@@@@3@@@3@#66:qq:qq@@г89:qr :qr@г;)Longident:qr:qr @B:qr :qr @@@J6@@@P6 @@гE$list:qrA@гI)core_type:qr:qr@@Q6@@@V6L@@@@N8:ԐLK@KK@@@K@K@#GG:rKrO:rKr\@2@гI/class_structure:rKr`J@@P6װK@@@@M8:KJ@JJ@@@J@J@#FF: rr: rr@@гHI: rr: rr@@O6@@гK&option; rr; rr@гP*expression;  rr;  rr@@X7@@@]7 @@гU'pattern; rr; rr@@]7@@гZ*class_expr; rr[@@a7\@@@@^9;1\[@[[@@@[@[@#WW;0u}u;1u}u@-@гY*class_expr;:u}u;;u}u@@a75@@г^$list;Du}uO@В@гbc;Ou}u;Pu}u@@i7J@@@гe*expression;Zu}u;[u}u@@m7U@@@y7V@@@~7W;_u}uj@@@@l9Q;pji@ii@@@i@i@#ee;o vv;p vv@@@гgh;x vv;y vv@@n7s@@гj$list; vv; vv@гo-value_binding; vv; vv@@w7@@@|7 @@гt*class_expr; vvu@@{7v@@@@x9;vu@uu@@@u@u@#qq;'xFxJ;'xFxX@W@гs*class_expr;'xFx\;'xFxf@@{7@@гx*class_type;'xFxiy@@7z@@@@|9;͐zy@yy@@@y@y@#uu;(xx;(xx@`@гw)extension;(xxx@@~7аy@@@@{9;萠yx@xx@@@x@x@#tt;)xx;)xx@[@гv0open_description;)xx;)xx@@~7@@г{*class_expr;)xx5-@@75.@@@@9< ~}@}}@@@}@}@@A@5;@+5959< +yy< +yy@@;@@*pcstr_self@@71@@@ <-yy"<-yy6@@<2@,pcstr_fields@@;5@@@@ @@@ <*.y7y<<+.y7y[@@(Location<9zzz<9zzz@E<9zzz<9zzz@@@M8Ű@@P@@ 8@J@#FFA<:zz@2@@Ш@гI*attributes<:zz<:zz@@Q8װ@@T@@ 8@P:<񐠠NM@MM@@@M@M@@A@6@+55<=zz<=zz@@;@@+Pcf_inherit;-override_flag@@@ 6P@@@ zz=>z{6@; { [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] =#?{7{==$L}}@@@@@@@=<@'Pcf_val@;#loc;%label@@@@@@@;,mutable_flag@@@@6P@@@@@@@=IM}}=JM}}@;<  [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)]} =WN}~=X[@@@@@@@=p@*Pcf_method@;#loc;%label@@@ @@@ @;,private_flag@@@ @6@@@ @@@@=}\=~\5@;p - [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]}) =]6<=a@@@@@@@=@.Pcf_constraint@9@@@@9@@@@@@@=b=bH@;6 [constraint T1 = T2] =bJ=be@@@@@@@=@/Pcf_initializer8@@@@@=cfh=cf@;1 [initializer E] =cf=cf@@@@@@@=@-Pcf_attribute:2@@@@@=d=d@;ΐ. [[\@\@\@id]] =d=d@@@@@@@> @-Pcf_extension9@@@@@=e7@;鐠* [[%%id]] >e>e@@@@@@@>!@@@A@@@@@7@@@7@#> >zz> >z{@@г>>z{>>z{@@:@@г*class_expr>>z{> >z{"@@!:@@г&option>)>z{0@г"#>0>z{,>1>z{/@г%&string>9>z{%>:>z{+@@-:4@@@3:5 @@@8:6(@@@@*N('@''@@@'@'@###>MM}}>NM}}@@В@г%&>ZM}}>[M}}@г()>bM}}>cM}}@@/:]@@@5:^ @@@г+,>mM}}>nM}}@@2:h@@@г.0class_field_kind>xM}}>yM}}@@6:s@@@O:t@@@@421@11@@@1@1@#-->\>\@@В@г/0>\>\@г23>\ >\@@9:@@@?: @@@г56>\>\!@@<:@@@г80class_field_kind>\$>\4@@@:@@@Y:@@@@><>ʐ<;@;;@@@;@;@#77>b>b-@@В@г9)core_type>b2>b;@@A:Ұ@@@г>)core_type>b>>bG@@F:ݰ@@@Q:ް@@@@D<>BA@AA@@@A@A@#==>cfj>cfy@(@г?*expression>cf}@@@F:A@@@@C<?A@@@@@@@@@@@#<<?d?d@'@г>)attribute?d?@@E;@@@@@B= ?,@?@??@@@?@?@#;;?+e?,e@'@г=)extension?5e8A@@D;/8B@@@@A=(?G@?@??@@@?@?@@A@8O@+8M8M?Fg ?Gg@@;@@+Cfk_virtual:@@@@@?Uh?Vh8@@?n"@,Cfk_concrete=-override_flag@@@:c@@@@@?ii9;8m@@?#@@@A@@@@@8p@@@8m@#""?ph ?qh+@@г$)core_type?zh/%@@+;t&@@@@(@#$$?i9=?i9I@@г&'?i9M?i9Z@@-;@@г)*expression?i9]8@@0;8@@@@-@@A@8@+88?kim?ki~@@;@@(!t@@@?s#(?s#=@@?%@/pmty_attributes@@;t@@@!?t>C?t>_@=א7 [... [\@id1] [\@id2]] ?t>a?t>}@@@@@@@@ &@@@A@@@@@88@@8@#550?r@/@@Ш@г80module_type_desc@r@r!@@@;@@C@@<@?@#;;4@ s#0@3@@Ш@г>(Location@s#2@s#:@E@s#;@s#<@@@M<@@P@@<@J@#FFA@%t>R@2@@Ш@гI*attributes@.t>T@/t>^@@Q<)@@T@@"<,@P>$@CNM@MM@@@M@M@@A@9,@O@N9*9)@9)9)@@@9)@9)@Z@Y9'9&@9&9&@@@9&@9&@+9$9$@Xw@Yw@@;@@*Pmty_ident>#loc4!t@@@$@@@&@@@ox@px@>b [Pmty_ident(S)] represents [S] @}x@~x@@@@@@@@'@.Pmty_signature9G@@@'@@@y@y@>~/ [sig ... end] @y@y@@@@@@@@(@,Pmty_functor9k@@@(9@@@)@@@z@zN@>; [functor(X : MT1) -> MT2] @{OU@{Ou@@@@@@@@)@)Pmty_with9@@@*@K8@@@+@@@-@@@|vx@|v@>Ő/ [MT with ...] @|v@|v@@@@@@@@*@+Pmty_typeof8@@@.@@@}@}@>ᐠ5 [module type of ME] @}@}@@@@@@@A+@.Pmty_extension<@@@/@@A ~A ~@>) [[%id]] A~A~*@@@@@@@A1,@*Pmty_alias?#loc5!t@@@0@@@2@@A.+-9@? . [(module M)] A;+NA<+a@@@@@@@AT-@@@A@@@@@:@@@:@#ACxADx@@г堐ALx@г砡)LongidentAVxAWx@AZxA[x@@@=V@@@=W @@@@񠰠?PAo@@@@@@#AnyAoy@@г점)signatureAxy@@=r@@@@𠰠?kA@@@@@@#AzAz+@@г렐1functor_parameterAz/Az@@@=@@г+module_typeAzC@@=@@@@?A@@@@@@#A|vzA|v@@г+module_typeA|vA|v@@=@@г$listA|v@г/with_constraintA|vA|v@@=Ű@@@=ư@@@@?Aސ@@@@@@#A}A}@@г+module_exprA}@@=@@@@?A@@@@@@#A~A~ @@г)extensionB~@@=@@@@?B@@@@@@#B+/B+9@@гB+I:@г)LongidentB&+=B'+F@B*+GB++H@@@>&@@@ >' :@@@@@ B?@@@@@@@A@;@+;;B>cgB?cx@@;@@$Unit@@BH{}BI{@@;& [()] BV{BW{@@@@@@@Bo.@%Named@#locAʠB9@@@3@@@5@@@7;d@@@8@@Bt;5@@f [Named(name, MT)] represents: - [(X : MT)] when [name] is [Some X], - [(_ : MT)] when [name] is [None] BBI@@@@@@@B/@@@A@@@@@;F@@@;C@#CCB{A@2@@@D@|BBA@AA@@@A@A@#==BB@@г?@BB@гB&optionBB@гG&stringBB@@O>@@@T> @@@Z>@@гL+module_typeB;@@S>;@@@@P@BӐON@NN@@@N@N@@A@;@+;;BKOBKX@@;@@?ABY;@@@9@@@;@@@@;@@@;@@Aг $listBKj;@г.signature_itemBK[BKi@@>@@@>;@@;@+;;BptBp@@;@@)psig_desc@@;@@@<CC@@C0@(psig_loc@@Aa!t@@@?CC@@C*1@@@A@@@@@;@@@;@#C@@@Ш@г3signature_item_descC"C#@@&?@@)@@=? @%@#!!C+@@@Ш@г$(LocationC6C7@+C:C;@@@3?6@@6@@@?9@0@@A@;@+;;CDCE@@;@@*Psig_value=@@@B@@CSCT@AF E - [val x: T] - [external x: T = "s1" ... "sn"] CaCbU`@@@@@@@Cz2@)Psig_typeA(rec_flag@@@CB=@@@D@@@F@@CzacC{a@Am ' [type t1 = ... and ... and tn = ...] CC@@@@@@@C3@.Psig_typesubstC=@@@G@@@I@@CC@A ) [type t1 := ... and ... and tn := ...] CC&@@@@@@@C4@+Psig_typext=@@@J@@C')C'H@A2 [type t1 += ...] C'JC'a@@@@@@@C5@.Psig_exception=@@@K@@CbdCb@AƐ4 [exception C of T] CbCb@@@@@@@C6@+Psig_module<@@@L@@CC@A␠ $ [module X = M] and [module X : MT] CC@@@@@@@D7@-Psig_modsubst<@@@M@@D D @A1 [module X := M] DD3@@@@@@@D28@.Psig_recmoduleC<@@@N@@@P@@D,46D-4a@B , [module rec X1 : MT1 and ... and Xn : MTn] D:bhD;b@@@@@@@DS9@,Psig_modtype<@@@Q@@DHDI@B; * [module type S = MT] and [module type S] DVDW@@@@@@@Do:@1Psig_modtypesubstÐ<@@@R@@DdDe,@BW: [module type S := ...] Dr-3Ds-R@@@@@@@D;@)Psig_openĐ<@@@S@@DSUDSt@Bs* [open X] DSvDS@@@@@@@D<@,Psig_includeŐ<@@@T@@DD@B. [include MT] DD@@@@@@@D=@*Psig_classƐD6>%@@@U@@@W@@DD@B ' [class c1 : ... and ... and cn : ...] DD@@@@@@@D>@/Psig_class_typeǐDW>7@@@X@@@Z@@D!DQ@Bѐ . [class type ct1 = ... and ... and ctn = ...] DRXDR@@@@@@@E?@.Psig_attributeȐAQ@@@[@@DD@B퐠. [[\@\@\@id]] EE @@@@@@@E!@@.Psig_extensionɐ@@@@\@@@@]@@E=@C * [[%%id]] E(E)@@@@@@@EAA@@@A@@@@@=@@@=@#E0E1@@г栐1value_descriptionE:@@A4@@@@꠰C-EL@@@@@@#EKaeELan@@г堐ETarEUaz@@AO@@г蠐$listE^a@г점0type_declarationEfa}Ega@@Aa@@@Ab@@@@񠰠C[Ez@@@@@@#EyEz@@г점$listE@г0type_declarationEE@@A@@@A@@@@CE@@@@@@#E'+E'6@@г.type_extensionE':@@A@@@@CE@@@@@@#EbfEbt@@г.type_exceptionEbx@@A@@@@󠰠CEՐ@@@@@@#EE@@г2module_declarationE@@Aذ@@@@򠰠CE𐠠@@@@@@#EE@@г3module_substitutionE@@A@@@@񠰠CF @@@@@@#F 48F 4F@@г점$listF4]@г2module_declarationF4JF4\@@B@@@B@@@@DF0@@@@@@#F/F0@@г7module_type_declarationF9@@B3@@@@D,FK@@@@@@#FJFK@@г7module_type_declarationFT@@BN@@@@󠰠DGFf@@@@@@#FeSWFfS`@@г0open_descriptionFoSd@@Bi@@@@򠰠DbF@@@@@@#FF@@г3include_descriptionF@@B@@@@񠰠D}F@@@@@@#FF@@г점$listF@г1class_descriptionFF@@B@@@B@@@@DF@@@@@@#F#F2@@г$listFM@г6class_type_declarationF6FL@@BͰ@@@Bΰ@@@@DF搠@@@@@@#FF@@г)attributeF@@B@@@@DG@@@@@@#GG@@г)extensionG G @@C@@г*attributesG?@@C?@@@@EG&@@@@@@@A@?@+? ?°G%G&@@;@@(pmd_name@@E#locFG@@@^@@@`@@@bG=$G>@@@GVB@(pmd_type@@@9@@@eGIAFGJA\@@GbC@.pmd_attributes@@B@@@hGU]bGV]}@EH; [... [\@\@id1] [\@\@id2]] Gc]Gd]@@@@@@@G|D@'pmd_loc@@E!t@@@kGqGr@@GE@@@A@@@@@@@ @@?@#LL<Gy,@;@@Ш@гOPG<G?@гR&optionG5G;@гW&stringG.G4@@_C@@@dC @@@jC@@m@@cC@^@#ZZUGAN@T@@Ш@г]+module_typeGAPGA[@@eC@@h@@fC@d@#``[G]p@L@@Ш@гc*attributesG]rG]|@@kC@@n@@iC@jEGΐhg@gg@@@g@g@#cc\G@[@@Ш@гf(LocationGG@mGG@@@uCذ@@x@@lC@r@@A@@}EG򐠠@{@z@@z@z@@@@z@@z@+@x@xGG@@;@@(pms_name@@F#locG@@@q@@@sH %H :@@HF@,pms_manifest@@F#locI#'A@гR&stringI+'7I,'=@@ZE&@@@`E' @@c@@E*@Y@#UUKI5CQ@J@@Ш@гX&optionI>C_I?Ce@г]+module_typeIGCSIHC^@@eEB@@@jEC @@m@@EF@d@#``[IQg{@L@@Ш@гc*attributesIZg}I[g@@kEU@@n@@EX@jGPIohg@gg@@@g@g@#cc\In@[@@Ш@гf(LocationIyIz@mI}I~@@@uEy@@x@@E|@r@@A@A򠰠GtIAA@AA@@@A@A@+AAII@А!a@EII@@\@;@A*popen_expr@@D@II@@IN@.popen_override@@H7-override_flag@@@II@@IO@)popen_loc@@H!t@@@II@@IP@0popen_attributes@@E`@@@II@@IQ@@@A@Y@@@@@B)B&@@B@#441I@0@@Ш@А!a:EٰII@@?@@E@=@#993I@2@@Ш@г<=II@@CE@@F@@E@A@#==6I@5@@Ш@г@(LocationJJ@GJ J @@@OF@@R@@F@L@#HHCJ@B@@Ш@гK*attributesJJ@@SF@@V@@F@R@@A@BuHJ1BsBr@BrBr@@@Br@Br@+BpBpJ0J1@@;@@FABH#loc>!t@@@@@@@@@@@@@B|By@@Bk@@Aг*open_infosJLB@гJSJT@г)LongidentJ^J_@ JbJc@@@(F^@@@.F_ @@@3F` B@@BHYJxBB@BB@@@B@B@+BBJw'+Jx';@@;@@G%AB۠B;@@@@@@@@@@BB@@B@@Aг *open_infosJ'JB@г+module_exprJ'>J'I@@F@@@FB@@BHJBB@BB@@@B@B@+BBJJ@А!a@FJJ@@p@;@A)pincl_mod@@D@JJ@@JR@)pincl_loc@@I!t@@@JJ@@JS@0pincl_attributes@@Fg@@@JJ;@@JT@@@A@Y@@@@@B@@@B@#''$J@#@@Ш@А!a-FJJ@@2@@F@0@#,,%J @$@@Ш@г/(LocationJ J@6JK@@@>F@@A@@F@;@#772K .@1@@Ш@г:*attributesK0K:@@BG @@E@@G@A@@A@C@+CCKCGKCZ@@;@@GAC*D@@@@@@@@@@CC@@C@@Aг -include_infosK/CiC@г+module_typeK7C]K8Ch@@G2@@@G3C)@@C+I,KKC)C(@C(C(@@@C(@C(@+C&C&KJKK@@;@@GACYC@@@@@@@@@@C*C'@@C@@Aг -include_infosK^C0@г+module_exprKfKg@@Ga@@@GbC;@@C=I[KzC;C:@C:C:@@@C:@C:@+C8C8Ky59Kz5H@@;@@*Pwith_typeݐJ #loc?!t@@@@@@E@@@@@KKMKK@I [with type X.t = ...] Note: the last component of the longident must match the name of the type_declaration. KK@@@@@@@KU@,Pwith_moduleސJ3#loc@!t@@@@@@ĠJ@#loc@!!t@@@@@@@@KKH@I7 [with module X.Y = Z] KIOKIk@@@@@@@KV@-Pwith_modtypeߐJd#loc@E!t@@@@@@ʠD@@@@@KlnKl@I␠< [with module type X.Y = Z] KK@@@@@@@LW@2Pwith_modtypesubstJ#loc@n!t@@@@@@ΠE@@@@@LL@J # [with module type X.Y := sig end] L&L'-@@@@@@@L?X@/Pwith_typesubstᐠJ#loc@!t@@@@@@ҠF@@@@@LA.0LB.g@J4 5 [with type X.t := ..., same format as [Pwith_type]] LOhnLPh@@@@@@@LhY@.Pwith_modsubst␠J#loc@!t@@@@@@֠J#loc@!t@@@@@@@@LrD.@Jd8 [with module X.Y := Z] LL@@@@@@@LZ@@@A@@@@@D?@@@D<@#LKOLKY@@г LKiLKl@г )LongidentLK]LKf@LKgLKh@@@H@@@ H @@г0type_declarationLKo@@H@@@@JL@@@@@@#LL#@@гL3L6@г)LongidentL'L0@L1L2@@@&Hа@@@,HѰ @@г!"LE@г#)LongidentL9LB@*LCLD@@@2H@@@8H +@@@@-JM+*@**@@@*@*@#&&MlpMl}@@г()M lM l@г+)LongidentMlMl@2MlMl@@@:I@@@@I @@г5+module_typeM%l6@@<I7@@@@9KM776@66@@@6@6@#22M6M7@@г45M?M@@г7)LongidentMJMK@>MNMO@@@FIJ@@@LIK @@гA+module_typeMZB@@HITC@@@@EKMMlCB@BB@@@B@B@#>>Mk.2Ml.A@@г@AMt.QMu.T@гC)LongidentM.EM.N@JM.OM.P@@@RI@@@XI @@гM0type_declarationM.WN@@TIO@@@@QKMON@NN@@@N@N@#JJMM@!@гLMMM@гO)LongidentMM@VMM@@@^I@@@dI @@гYZME@г[)LongidentMM@bMM@@@jIͰ@@@pIΰ E@@@@eKM搠dc@cc@@@c@c@@A@E@+EEM<@M<K@@;@@)pmod_desc@@E@@@ڰMTYMTu@@N [@(pmod_loc@@LP!t@@@ݰNv{Nv@@N\@/pmod_attributes@@I@@@N  N  @K7 [... [\@id1] [\@id2]] N N @@@@@@@N3]@@@A@@@@@EE@@E@#550N"Tb@/@@Ш@г80module_expr_descN+TdN,Tt@@@J&@@C@@J)@?@#;;4N4v@3@@Ш@г>(LocationN?vN@v@ENCvNDv@@@MJ?@@P@@JB@J@#FFANM @2@@Ш@гI*attributesNV NW @@QJQ@@T@@JT@PLLNkNM@MM@@@M@M@@A@FNwNvFF@FF@@@F@F@+FFNu Nv @@;@@*Pmod_ident搠M#locB!t@@@@@@@@N N @L% [X] N N @@@@@@@N^@.Pmod_structure琠FA@@@@@NN<@L2 [struct ... end] N>NU@@@@@@@N_@,Pmod_functor萠G@@@F@@@@@NVXNV@L: [functor(X : MT1) -> ME] NN@@@@@@@N`@*Pmod_apply鐠F@@@F@@@@@NN@Lݐ, [ME1(ME2)] NN@@@@@@@Oa@/Pmod_apply_unitꐠF@@@@@OO@L) [ME1()] OO@@@@@@@O-b@/Pmod_constraint될F@@@H@@@@@O' "O( P@M- [(ME : MT)] O5 RO6 d@@@@@@@ONc@+Pmod_unpack쐠J=@@@@@OCegODe@M6+ [(val E)] OQeORe@@@@@@@Ojd@.Pmod_extension퐠K @@@@@O_F@MQ) [[%id]] OlOm@@@@@@@Oe@@@A@@@@@G@@@G @#Ot Ou @@гO}  @г)LongidentO O  @O  O  @@@ K@@@K @@@@MO@@@@@@#O!O/@@г)structureO3@@K@@@@MO@@@@@@#OVZOVf@@г1functor_parameterOVjOV{@@K@@г+module_exprOV~@@ KȰ@@@@MO@@@@@@#OO@@г+module_exprOO@@ K@@г+module_exprO @@K @@@@ MP  @  @@@ @ @#PP@@г+module_exprP@@L @@@@ NP  @@@@@@#P $P  3@@г+module_exprP) 7P* B@@L$@@г +module_typeP3 E @@L- @@@@N&PE  @  @@@ @ @#PDeiPEet@@г *expressionPNex @@LH @@@@NAP`  @  @@@ @ @#P_P`@@г )extensionPiH@@LcH@@@@ N\P{  @  @@@ @ @@A@H@+HHPzP{@@;@@M(APH@@@@@@@@@@H@@@H@@Aг $listPH@г.structure_itemPP@@L@@@LH(@@H*@+H(H(PP@@;@@)pstr_desc@@H-@@@P P*@@Pf@(pstr_loc@@O !t@@@P+0P+E@@Pg@@@A@@@@@HD@@@HA@#P@@@Ш@г3structure_item_descPP)@@&LŰ@@)@@L@%@#!!P+8@@@Ш@г$(LocationP+:P+B@+P+CP+D@@@3Lް@@6@@L@0@@A@Hp@+HnHnPMQPMd@@;@@)Pstr_evalK@@@L@@@@@Q giQ g@N󐠠% [E] Q gQ g@@@@@@@Q'h@*Pstr_valueO(rec_flag@@@PH@@@@@@@@Q'!Q(!@O 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]}. Q5"Q6'@@@@@@@QNi@.Pstr_primitiveK@@@@@QC(QD(D@O6 < - [val x: T] - [external x: T = "s1" ... "sn" ]QQ)EKQR*\@@@@@@@Qjj@)Pstr_typeO(rec_flag@@@PK@@@@@@@@Qj+Qk+@O] & [type t1 = ... and ... and tn = ...] Qx,Qy,@@@@@@@Qk@+Pstr_typextK@@@@@Q-Q-@Oy2 [type t1 += ...] Q-Q-+@@@@@@@Ql@.Pstr_exceptionK@@@@@Q.,.Q.,P@O 8 - [exception C of T] - [exception C = M.X] Q/QWQ0p@@@@@@@Qm@+Pstr_moduleI@@@@@Q1Q1@O1 [module X = ME] Q1Q1@@@@@@@Qn@.Pstr_recmoduleQXI;@@@@@@ @@Q2Q2@OҐ , [module rec X1 = ME1 and ... and Xn = MEn] Q3Q30@@@@@@@Ro@,Pstr_modtypeJl@@@ @@Q413Q41\@O6 [module type S = MT] R 41^R 41y@@@@@@@R"p@)Pstr_openJ:@@@ @@R5z|R5z@P * [open X] R%5zR&5z@@@@@@@R>q@*Pstr_classQK6@@@ @@@@@R86R96@P+ ' [class c1 = ... and ... and cn = ...] RF7RG7@@@@@@@R_r@/Pstr_class_typeQҠK@@@@@@@@RY8  RZ8 ;@PL . [class type ct1 = ... and ... and ctn = ...] Rg9<BRh9<u@@@@@@@Rs@,Pstr_includeJQ@@@@@Ru:vxRv:v@Ph. [include ME] R:vR:v@@@@@@@Rt@.Pstr_attributeN@@@@@R;R;@P. [[\@\@\@id]] R;R;@@@@@@@Ru@.Pstr_extensionNZ@@@NB@@@@@R<J1@P* [[%%id]] R<R<%@@@@@@@Rv@@@A@@@@@JB@@@J?@#ӠӰR gkR gt@@гՠ*expressionR gxR g@@N̰@@гڠ*attributesR g@@Nհ@@@@ޠPR퐠@@@@@@#נװR!R!@@г٠ڰR!R!@@N@@гܠ$listR!@гࠐ-value_bindingS!S!@@O@@@O@@@@堰PS@@@@@@#ޠްS(!S(/@@гࠐ1value_descriptionS$(3@@O@@@@䠰QS6@@@@@@#ݠݰS5+S6+@@гߠS>+S?+@@O9@@г⠐$listSH+@г栐0type_declarationSP+SQ+@@OK@@@OL@@@@렰QESd@@@@@@#Sc-Sd-@@г栐.type_extensionSm-@@Og@@@@꠰Q`S@@@@@@#S~.,0S.,>@@г堐.type_exceptionS.,B@@O@@@@頰Q{S@@@@@@#S1S1@@г䠐.module_bindingS1@@O@@@@蠰QS@@@@@@#S2S2@@г㠐$listS2@г砐.module_bindingS2S2@@O@@@O°@@@@젰QSڐ@@@@@@#S415S41A@@г砐7module_type_declarationS41E@@Oݰ@@@@렰QS@@@@@@#S5z~S5z@@г栐0open_declarationS5z@@O@@@@꠰QT@@@@@@#T6T6@@г堐$listT6@г預1class_declarationT!6T"6@@P@@@P@@@@RT5@@@@@@#T48  T58 @@г預$listT>8 7@г6class_type_declarationTF8  TG8 6@@PA@@@PB@@@@򠰠R;TZ@@@@@@#TY:vzTZ:v@@г3include_declarationTc:v@@P]@@@@񠰠RVTu@@@@@@#Tt;Tu;@@г점)attributeT~;@@Px@@@@𠰠RqT@@@@@@#T<T<@@г렐)extensionT<T<@@P@@г*attributesT< L"@@PL#@@@@RT@@@@@@@A@L0@+L.L.T>'+T>';@@;@@.Pvc_constraint8locally_abstract_univars@@TDSL#locT@@@@@@@@@T@V\T@V@@Tw@#typ@@PX@@@TATA@@Tx@@@T?>@TB@@Ty@,Pvc_coercion&ground@@TSPq@@@ @@@"TCTC@@Uz@(coercion@@P~@@@%UCUC@@U{@@@UCL~@R  - [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] UDUL@@@@@@@U-|@@@A@@@@@L@@@L@#``U?>BU?>P@;@#bbRU#@Vt@Q@@Ш@гe$listU,@VU-@V@гjkU4@V|U5@V@гm&stringU=@VuU>@V{@@uQ8@@@{Q9 @@@Q:@@@@Q=@t@#ppkUHA@j@@Ш@гs)core_typeUQAURA@@{QL@@~@@QO@z@@@v@#rrUZCU[C@F@#ttjUaC@i@@Ш@гw&optionUjCUkC@г|)core_typeUsCUtC@@Qn@@@Qo @@@@#Qr@@#zU}C@y@@Ш@г)core_typeUC@@Q@@@@&Q@@@@S{U@@@@@@@A@M @+M M UNUN@@;@@'pvb_pat@@P@@@(UPUP@@U}@(pvb_expr@@P@@@+UQUQ@@U~@.pvb_constraint@@UM<@@@.@@@0URURE@@U@.pvb_attributes@@Q_@@@3USFJUSFe@@U@'pvb_loc @@T-!t@@@6UTfjUTf~@@U@@@A@@@@@MPMM@@M@@#DD?UP@>@@Ш@гG'patternUPUP@@OQ@@R@@)Q@N@#JJEUQ @D@@Ш@гM*expressionVQ VQ@@UQ@@X@@,Q@T@#PPFV R+@E@@Ш@гS&optionVR>VRD@гX0value_constraintVR-VR=@@`R@@@eR @@h@@1R@_@#[[VV%SFX@U@@Ш@г^*attributesV.SFZV/SFd@@fR)@@i@@4R,@e@#aaZV7Tfq@Y@@Ш@гd(LocationVBTfsVCTf{@kVFTf|VGTf}@@@sRB@@v@@7RE@p@@A@MT=V\MM@MM@@@M@M@+MMV[WV\W@@;@@(pmb_name @@T#locUΠV=@@@9@@@;@@@=VsYVtY@@V@(pmb_expr @@N6@@@@VZVZ@@V@.pmb_attributes @@R@@@CV[ V[%@@V@'pmb_loc @@T!t@@@FV\&+V\&?@@V@@@A@@@@@MM@@M@#>>.VY@-@@Ш@гABVYVY@гD&optionVYVY@гI&stringVYVY@@QR@@@VR @@@\R@@_@@>R@P@#LLGVZ@F@@Ш@гO+module_exprVZVZ@@WRʰ@@Z@@AR@V@#RRMV[@L@@Ш@гU*attributesV[V[$@@]Rܰ@@`@@DR@\@#XXQV\&2@P@@Ш@г[(LocationV\&4V\&<@bV\&=V\&>@@@jR@@m@@GR@g@@A@NZTWNXNW@NWNW@@@NW@NW@@SjS-Nd@WW. {1 Toplevel} W`W`@@@@@@3WWWWWWWW@SNNNNvNNOO }O% OB O_ GOl O O 2O OOqP=P PlP"P*$P2 PVPePmPurP}PVP PPPP P"1P"Q#Q$Q<%.QD&QZ&Qb'IQx(Q)Q*5Q+Q+Q-Q.Q/UR /R0AR0R$1R,1RB2{RJ=R`>xRhDqR~ERERERFRG RGRL^RMSNRN$SNmSS@AKWwWv6 {2 Toplevel phrases} WsbWtb@@@@@@YA+/toplevel_phraseDW~dWd@@;@@(Ptop_defO&@@@&@@WeWe@@W@(Ptop_dir2toplevel_directiveD@@@'@@WfWf@U5 [#use], [#load] ... WfWf*@@@@@@@W@@@A@@@@@Wd@@@@W@@#00WeWe@)@г2)structureWe3@@93WWWWWWWW@L;@@@A@@@@@@@@/;@@@A@@@@@Wh,,Wm@@@@W@2directive_argumentD;@@@A@@@@@WoWs @@@@W@7directive_argument_descD;@@@A@@@@@WuWy@@@@W@@AQ@@@@S@#OOWfWf@8@гQ2toplevel_directiveWfP@@X-Q@@@@SUWQP@PP@@@P@P@@A@L@+ccWh,0Wh,B@@;@@)pdir_name@@V#locW@@@(@@@*XjIMXjIc@@X*@(pdir_arg@@W~Q@@@-@@@/X"kdhX#kd@@X;@(pdir_loc@@V!t@@@2X0lX1l@@XI@@@A@@@@@i@@@f@#22'X8jIV@&@@Ш@г56X@jI_XAjIb@г8&stringXIjIXXJjI^@@@@@@F @@I@@+@?@#;;1XSkdp@0@@Ш@г>&optionX\kdX]kd@гC2directive_argumentXekdrXfkd@@K@@@P @@S@@0@J@#FF?Xol@>@@Ш@гI(LocationXzlX{l@PX~lXl@@@X@@[@@3@U@@A@@+XoXo@@;@@*pdira_desc@@@@@8XqXq@@X@)pdira_loc@@V!t@@@;XrXr @@X@@@A@@@@@@@@@#Xq@@@Ш@г7directive_argument_descXqXq@@&@@)@@9@%@#!!Xr@@@Ш@г$(LocationXrXr @+Xr Xr @@@3@@6@@<@0@@A@@+XuXu-@@;@@+Pdir_stringX@@@>@@Xv02Xv0I@@X@(Pdir_intX@@@?XYX@@@@@@@B@@XwJLXwJn@@Y@*Pdir_identMi!t@@@C@@Y xoqYxo@@Y&@)Pdir_boolX@@@D@@Yy@@@Y3@@@A@@@@@C@@@@@#DDY"v04Y#v0?@=@гF&stringY,v0CG@@MlH@@@@J@#FFY2wJNY3wJV@5@гH&stringY<wJZY=wJ`@@P}@@гM&optionYFwJhI@гQ$charYNwJcYOwJg@@Y@@@^T@@@@V@#RRYVxosYWxo}@I@гT)LongidentYbxoYcxo@[YfxoY@Z@@b[@@@@]@#YYYmyYny@S@г[$boolYwy@@b@@@@_@@A@@@]@@WWA@WWB@V2V,A@UUA@U3PB@UPFB@UP$B@UO=B@TNB@TJ$B@TI7B@THB@THB@TGB@TGSB@TFB@T@B@T@B@T~4B@Tj41B@T81$B@T01B@S-B@S-`B@S,B@S+nB@S*B@S)B@S(B@S(cB@S'B@Sx&B@Sr%wB@S^%B@SX$B@SR"B@S9!NB@S,!,B@S! B@S  |B@SB@RkB@RB@RB@RCB@R!B@RB@RB@RB@RB@RB@RB@RwB@Rc(B@ROSB@R6B@R}B@REB@QB@QB@QB@Q B@Q B@Q B@Q fB@Q B@QTB@QqB@QmB@A@yB@FB@@>B@@3ZZZZZZZZ@ECM@A@ H************************************************************************ZA@@Z A@L@ H Z%BMMZ&BM@ H OCaml Z+CZ,C@ H Z1DZ2D3@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt Z7E44Z8E4@ H Z=FZ>F@ H Copyright 1996 Institut National de Recherche en Informatique et ZCGZDG@ H en Automatique. ZIHZJHg@ H ZOIhhZPIh@ H All rights reserved. This file is distributed under the terms of ZUJZVJ@ H the GNU Lesser General Public License version 2.1, with the Z[KZ\KN@ H special exception on linking described in the file LICENSE. ZaLOOZbLO@ H ZgMZhM@ H************************************************************************ZmNZnN5@ * Abstract syntax tree produced by parsing {b Warning:} this module is unstable and part of {{!Compiler_libs}compiler-libs}. Zs * 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 XY;* 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. X * 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. W7* {1 Extension points} V䠠 * Attributes such as [[\@id ARG]] and [[\@\@id ARG]]. Metadata containers passed around within the AST. The compiler ignores unknown attributes. V * Extension points such as [[%id ARG] and [%%id ARG]]. Sub-language placeholder -- rejected by the typechecker. V 0* [: SIG] in an attribute or an extension point P .* [: T] in an attribute or an extension point P堠 A* [? P] or [? P when E], in an attribute or an extension point Pà4* {1 Core language} U7* {2 Type expressions} U8* [... [\@id1] [\@id2]] P&* [_] O?* A type variable such as ['a] Oh * [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]}. OD 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]. O * [Ptyp_constr(lident, l)] represents: - [tconstr] when [l=[]], - [T tconstr] when [l=[T]], - [(T1, ..., Tn) tconstr] when [l=[T1 ; ... ; Tn]]. Nꠠ V* [Ptyp_object([ l1:T1; ...; ln:Tn ], flag)] represents: - [< l1:T1; ...; ln:Tn >] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, - [< l1:T1; ...; ln:Tn; .. >] when [flag] is {{!Asttypes.closed_flag.Open}[Open]}. NƠ * [Ptyp_class(tconstr, l)] represents: - [#tconstr] when [l=[]], - [T #tconstr] when [l=[T]], - [(T1, ..., Tn) #tconstr] when [l=[T1 ; ... ; Tn]]. N-* [T as 'a]. Nw * [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"]]. NC * ['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}. N0* [(module S)]. N** [M.(T)] M۠+* [[%id]]. Mà * As {!package_type} typed values: - [{ppt_path: S; ppt_cstrs: []}] represents [(module S)], - [{ppt_path: S; ppt_cstrs: [(t1, T1) ; ... ; (tn, Tn)]}] represents [(module S with type t1 = T1 and ... and tn = Tn)]. V 2* [Rtag(`A, b, l)] represents: - [`A] when [b] is [true] and [l] is [[]], - [`A of T] when [b] is [false] and [l] is [[T]], - [`A of T1 & .. & Tn] when [b] is [false] and [l] is [[T1;...Tn]], - [`A of & T1 & .. & Tn] when [b] is [true] and [l] is [[T1;...Tn]]. - The [bool] field is true if the tag contains a constant (empty) constructor. - [&] occurs when several types are used for the same constructor (see 4.2 in the manual) IѠ,* [[ | t ]] I/* {2 Patterns} UԠ8* [... [\@id1] [\@id2]] HL3* The pattern [_]. Gʠ !* A variable pattern such as [x] G %* An alias pattern such as [P as 'a] G A* Patterns such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n] Gn * Patterns such as ['a'..'z']. Other forms of interval are recognized by the parser but rejected by the type-checker. GP * [Ppat_tuple(pl, Closed)] represents - [(P1, ..., Pn)] when [pl] is [(None, P1); ...; (None, Pn)] - [(~L1:P1, ..., ~Ln:Pn)] when [pl] is [(Some L1, P1); ...; (Some Ln, Pn)] - A mix, e.g. [(~L1:P1, P2)] when [pl] is [(Some L1, P1); (None, P2)] [Ppat_tuple(pl, Open)] is similar, but indicates the pattern additionally ends in a [..]. Invariant: - If Closed, [n >= 2]. - If Open, [n >= 1]. G h* [Ppat_construct(C, args)] represents: - [C] when [args] is [None], - [C P] when [args] is [Some ([], P)] - [C (P1, ..., Pn)] when [args] is [Some ([], Ppat_tuple [P1; ...; Pn])] - [C (type a b) P] when [args] is [Some ([a; b], P)] Fܠ * [Ppat_variant(`A, pat)] represents: - [`A] when [pat] is [None], - [`A P] when [pat] is [Some P] F C* [Ppat_record([(l1, P1) ; ... ; (ln, Pn)], flag)] represents: - [{ l1=P1; ...; ln=Pn }] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]} - [{ l1=P1; ...; ln=Pn; _}] when [flag] is {{!Asttypes.closed_flag.Open}[Open]} Invariant: [n > 0] F>* Pattern [[| P1; ...; Pn |]] Fd4* Pattern [P1 | P2] FF4* Pattern [(P : T)] F(4* Pattern [#tconst] F3* Pattern [lazy P] E * [Ppat_unpack(s)] represents: - [(module P)] when [s] is [Some "P"] - [(module _)] when [s] is [None] Note: [(module P : S)] is represented as [Ppat_constraint(Ppat_unpack(Some "P"), Ptyp_package S)] Eʠ8* Pattern [exception P] E6 Pattern [effect P P] [,--9[,--S@2* Pattern [[%id]] E2* Pattern [M.(P)] Ef8* {2 Value expressions} U8* [... [\@id1] [\@id2]] A砠 -* Identifiers such as [x] and [M.x] AX 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]}. A * [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 _]. @頠 * [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] @u ]* [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] @H * [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] ?n6* [[| E1; ...; En |]] ?P:* [if E1 then E2 else E3] ?(+* [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]. >x** [E # m] >S,* [new M.c] >2+* [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). =k3* [object ... end] =R6* [fun (type t) -> E] =. &* [(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)] VF ]* [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. 4⠠ O* [Pparam_newtype x] represents the parameter [(type x)]. [x] carries the location of the identifier, whereas the [pparam_loc] on the enclosing [function_param] node is the location of the [(type x)] as a whole. Multiple parameters [(type a b c)] are represented as multiple [Pparam_newtype] nodes, let's say: {[ [ { pparam_kind = Pparam_newtype a; pparam_loc = loc1 }; { pparam_kind = Pparam_newtype b; pparam_loc = loc2 }; { pparam_kind = Pparam_newtype c; pparam_loc = loc3 }; ] ]} Here, the first loc [loc1] is the location of [(type a b c)], and the subsequent locs [loc2] and [loc3] are the same as [loc1], except marked as ghost locations. The locations on [a], [b], [c], correspond to the variables [a], [b], and [c] in the source code. 4Ġ * In [Pfunction_cases (_, loc, attrs)], the location extends from the start of the [function] keyword to the end of the last case. The compiler will only use typechecking-related attributes from [attrs], e.g. enabling or disabling a warning. 3ڠ H* See the comment on {{!expression_desc.Pexp_function}[Pexp_function]}. V H* See the comment on {{!expression_desc.Pexp_function}[Pexp_function]}. 3I9* {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"]] U8* {2 Type declarations} U頠3* [('a1,...'an) t] 1Ԡ 1* [... constraint T1=T1' ... constraint Tn=Tn'] 16* for [= private ...] 13* represents [= T] 1f<* [... [\@\@id1] [\@\@id2]] 1O * 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]. U<* Invariant: non-empty list /:* [l : T [\@id1] [\@id2]] / * - [{ ...; l: T; ... }] when {{!label_declaration.pld_mutable}[pld_mutable]} is {{!Asttypes.mutable_flag.Immutable}[Immutable]}, - [{ ...; mutable l: T; ... }] when {{!label_declaration.pld_mutable}[pld_mutable]} is {{!Asttypes.mutable_flag.Mutable}[Mutable]}. Note: [T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}. Uؠ=* [C of ... [\@id1] [\@id2]] . * Values of type {!constructor_declaration} represents the constructor arguments of: - [C of T1 * ... * Tn] when [res = None], and [args = Pcstr_tuple [T1; ... ; Tn]], - [C: T0] when [res = Some T0], and [args = Pcstr_tuple []], - [C: T1 * ... * Tn -> T0] when [res = Some T0], and [args = Pcstr_tuple [T1; ... ; Tn]], - [C of {...}] when [res = None], and [args = Pcstr_record [...]], - [C: {...} -> T0] when [res = Some T0], and [args = Pcstr_record [...]]. -;:* ... [\@\@id1] [\@\@id2] ,u d* Definition of new extensions constructors for the extensive sum type [t] ([type t += ...]). U=* [C of ... [\@id1] [\@id2]] +`<* [... [\@\@id1] [\@\@id2]] *à 1* Definition of a new exception ([exception E]). U G* [Pext_decl(existentials, c_args, t_opt)] describes a new extension constructor. It can be: - [C of T1 * ... * Tn] when: {ul {- [existentials] is [[]],} {- [c_args] is [[T1; ...; Tn]],} {- [t_opt] is [None]}.} - [C: T0] when {ul {- [existentials] is [[]],} {- [c_args] is [[]],} {- [t_opt] is [Some T0].}} - [C: T1 * ... * Tn -> T0] when {ul {- [existentials] is [[]],} {- [c_args] is [[T1; ...; Tn]],} {- [t_opt] is [Some T0].}} - [C: 'a... . T1 * ... * Tn -> T0] when {ul {- [existentials] is [['a;...]],} {- [c_args] is [[T1; ... ; Tn]],} {- [t_opt] is [Some T0].}} *7 G* [Pext_rebind(D)] re-export the constructor [D] with the new name [C] *5* {1 Class language} U .* {2 Type expressions for the class language} U8* [... [\@id1] [\@id2]] )l ** - [c] - [['a1, ..., 'an] c] (ڠ3* [object ... end] ( m* [Pcty_arrow(lbl, T, CT)] represents: - [T -> CT] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]}, - [~l:T -> CT] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]}, - [?l:T -> CT] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]}. ((* [%id] (5* [let open M in CT] (g * Values of type [class_signature] represents: - [object('selfpat) ... end] - [object ... end] when {{!class_signature.pcsig_self}[pcsig_self]} is {{!core_type_desc.Ptyp_any}[Ptyp_any]} U<* [... [\@\@id1] [\@\@id2]] ' /* [inherit CT] &-* [val x: T] &g b* [method x: T] Note: [T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}. &/7* [constraint T1 = T2] & /* [[\@\@\@id]] %+* [[%%id]] %۠<* [... [\@\@id1] [\@\@id2]] $C * Values of type [class_expr class_infos] represents: - [class c = ...] - [class ['a1,...,'an] c = ...] - [class virtual c = ...] They are also used for "class type" declaration. Up /* {2 Value expressions for the class language} U?8* [... [\@id1] [\@id2]] # >* [c] and [['a1, ..., 'an] c] "3* [object ... end] "m * [Pcl_fun(lbl, exp0, P, CE)] represents: - [fun P -> CE] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]} and [exp0] is [None], - [fun ~l:P -> CE] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]} and [exp0] is [None], - [fun ?l:P -> CE] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [None], - [fun ?l:(P = E0) -> CE] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [Some E0]. "? * [Pcl_apply(CE, [(l1,E1) ; ... ; (ln,En)])] represents [CE ~l1:E1 ... ~ln:En]. [li] can be empty (non labeled argument) or start with [?] (optional argument). Invariant: [n > 0] " Q* [Pcl_let(rec, [(P1, E1); ... ; (Pn, En)], CE)] represents: - [let P1 = E1 and ... and Pn = EN in CE] when [rec] is {{!Asttypes.rec_flag.Nonrecursive}[Nonrecursive]}, - [let rec P1 = E1 and ... and Pn = EN in CE] when [rec] is {{!Asttypes.rec_flag.Recursive}[Recursive]}. !蠠.* [(CE : CT)] !ʠ** [[%id]] !5* [let open M in CE] ! * Values of type {!class_structure} represents: - [object(selfpat) ... end] - [object ... end] when {{!class_structure.pcstr_self}[pcstr_self]} is {{!pattern_desc.Ppat_any}[Ppat_any]} U?<* [... [\@\@id1] [\@\@id2]]  |* [Pcf_inherit(flag, CE, s)] represents: - [inherit CE] when [flag] is {{!Asttypes.override_flag.Fresh}[Fresh]} and [s] is [None], - [inherit CE as x] when [flag] is {{!Asttypes.override_flag.Fresh}[Fresh]} and [s] is [Some x], - [inherit! CE] when [flag] is {{!Asttypes.override_flag.Override}[Override]} and [s] is [None], - [inherit! CE as x] when [flag] is {{!Asttypes.override_flag.Override}[Override]} and [s] is [Some x]  * [Pcf_val(x,flag, kind)] represents: - [val x = E] when [flag] is {{!Asttypes.mutable_flag.Immutable}[Immutable]} and [kind] is {{!class_field_kind.Cfk_concrete}[Cfk_concrete(Fresh, E)]} - [val virtual x: T] when [flag] is {{!Asttypes.mutable_flag.Immutable}[Immutable]} and [kind] is {{!class_field_kind.Cfk_virtual}[Cfk_virtual(T)]} - [val mutable x = E] when [flag] is {{!Asttypes.mutable_flag.Mutable}[Mutable]} and [kind] is {{!class_field_kind.Cfk_concrete}[Cfk_concrete(Fresh, E)]} - [val mutable virtual x: T] when [flag] is {{!Asttypes.mutable_flag.Mutable}[Mutable]} and [kind] is {{!class_field_kind.Cfk_virtual}[Cfk_virtual(T)]} ՠ * - [method x = E] ([E] can be a {{!expression_desc.Pexp_poly}[Pexp_poly]}) - [method virtual x: T] ([T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}) 7* [constraint T1 = T2] 2* [initializer E] h/* [[\@\@\@id]] O+* [[%%id]] 76* {1 Module language} U /* {2 Type expressions for the module language} U8* [... [\@id1] [\@id2]] R !* [Pmty_ident(S)] represents [S] ʠ0* [sig ... end] <* [functor(X : MT1) -> MT2] 0* [MT with ...] p6* [module type of ME] W** [[%id]] >/* [(module M)] '* [()]  * [Named(name, MT)] represents: - [(X : MT)] when [name] is [Some X], - [(_ : MT)] when [name] is [None] ޠ F* - [val x: T] - [external x: T = "s1" ... "sn"]  (* [type t1 = ... and ... and tn = ...] ݠ ** [type t1 := ... and ... and tn := ...] 3* [type t1 += ...] 5* [exception C of T]  %* [module X = M] and [module X : MT] t2* [module X := M] [ -* [module rec X1 : MT1 and ... and Xn : MTn] = +* [module type S = MT] and [module type S] $;* [module type S := ...]  +* [open X] /* [include MT] ٠ (* [class c1 : ... and ... and cn : ...]  /* [class type ct1 = ... and ... and ctn = ...] /* [[\@\@\@id]] +* [[%%id]] g<* [... [\@\@id1] [\@\@id2]] / :* Values of type [module_declaration] represents [S : MT] U!<* [... [\@\@id1] [\@\@id2]] f ;* Values of type [module_substitution] represents [S := M] U<* [... [\@\@id1] [\@\@id2]]  * Values of type [module_type_declaration] represents: - [S = MT], - [S] for abstract module type declaration, when {{!module_type_declaration.pmtd_type}[pmtd_type]} is [None]. U n* Values of type ['a open_infos] represents: - [open! X] when {{!open_infos.popen_override}[popen_override]} is {{!Asttypes.override_flag.Override}[Override]} (silences the "used identifier shadowing" warning) - [open X] when {{!open_infos.popen_override}[popen_override]} is {{!Asttypes.override_flag.Fresh}[Fresh]} T頠 U* Values of type [open_description] represents: - [open M.N] - [open M(N).O] TϠ q* Values of type [open_declaration] represents: - [open M.N] - [open M(N).O] - [open struct ... end] T ?* Values of type [include_description] represents [include MT] T ?* Values of type [include_declaration] represents [include ME] Tt * [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} Tk8* [... [\@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] Tt =* Values of type [module_binding] represents [module X = ME] Tb/* {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]Y]Z =/builds/workspace/precheck/flambda/false/label/ocaml-linux-32 >10/.-,+*)('&%$#"! @@04GIޑ f3]t]s]s]t]t]t]t]t@]r@@[0>n{T8cئ8CamlinternalFormatBasics0%FU(Q/Tu0CamlinternalLazy0&͂7 Pˆ*Format_doc0]mWϓ:Mݠ(Location0a7cK_H%9O0s `7mɕc]0T鿁ۘ7Qu&Stdlib0Lku]8_٠.Stdlib__Buffer08APF< t..Stdlib__Domain0:M;׉<O$Ġ.Stdlib__Either0Vy`u~c à.Stdlib__Format0ܚ#G7m|,Stdlib__Lazy0* -S$.)"0D.Stdlib__Lexing0e<.V +Stdlib__Seq0nwzG&amg+Stdlib__Sys0 -ռ鱦s5/-Stdlib__Uchar056uf4[_(Warnings0mJɒkgr@DDNNn@@@&&@Q@43ʰTTRYT@@ThT @@(v'-<-3ڕ2@@W'@YoM@A";B@--8G8 YQL QNO@!!@ڰKHu@  @V7A8I8A;\\@QO@˰$#X͒5@b$X69e9E@@3a@@@32 1@@İeQYU@@P6;6)@%LKϰQȓO@IF@1F0K]HϰNЕNV@@$#b@% $@^,ݓ,22N@+|*@ Ǖ {V8+LK@;-'Q&@ڕZTa@%Ǖ%*P*=@N.NONаRQ@@ D?@\P[@6@XC)M L@! $T"77[a[z@* )YE6@“! ư9@9@'.&D?@Xm*@Ve@@43J/G9JӓH@@@  Ȱ++B=U@W@ ݓ 2OW@SQ@@:\ӓ\c@)i(@@Y8YF@@+*@00~@v@2-p-K8G8 @8j8GB]<@@$~#)//g9%8@ Q @@  F @Y]5@C߰,AK;H\\ @X*@@@''@@@@YU2@!ۓ @WI22b:D:%C>!@@@:+9C=STTu@  Ql>A<@ Q MAM@@@> @ q Ͱ66C@{@ &]&0OO?UUa@0A/66c@#8#$@/K2ڕ2SٓR@V@W0(Wlΰ6Օ677@  qV@8H8:@..f..z54E@ @ȓ55Dv?4@NwN4@! e@10@@Ӱh@2;1@ ȓ ~9@ZC8}@*ӕ*A;CE=FFHN N@8h8M@v=Y.S[?V@&ٕ&@a@@)(5^4M@E''h@%$SC4=@@MrM<@0 gA;UVU@A;[O{@@"C!IFA@    UpU6UUJ@S<Q@“uY-B'<#@@X@99\W/@Q22@ k @@@^!^@ U 1^Y-/Y/@@Y.&C>L@@  @@J\GSSɓQ@&^@##@S'P@-,0ɕ0#@@@10@ Zϒ:D@ p 7@E@G%F@@ʓ((Q@Er@A@7F6ްE@t@JۓG@Z8%@*7^7@@|O[qP@ " @@4NJG@@  ZlT.R;\\V@Y U,SH@82ʕ2@:̕:@@  @@s@@K̓H@dAqY[]Ms@`2@XG_G%NjN[[N@Y$d1A0TR@D?@\Zw1@PO@Wܒ M++p@MJu\\@YM 20@/B$<K~Ht@  B<MJ@X  ON@"ɓ!C=@@Y$5@+N*y@*)[k;\ȕW@"![U@C,=NEs@KJH2W=V@@Z/@Y>D?fLMI@,M,9KHUS@@@;M;.@Xf43@~ ɓ@_^@'ɕ@Z(@4^4 @@PnPR@@3`2[N@( `54@Y!v!d@@@Z2@ B2<_D_.@ZG(p@00mM]JưOO@BT<;@Xڕ@@2 1@œ@@P@@