Caml1999I036#h eo)Parsetree(constant;@@+pconst_desc#@@-constant_desc @@@k5parsing/parsetree.mliZZ@@B@*pconst_loci@@(Location!t@@@j[[@@&C@@@A@@@@@Y\@@@@*@@A@;@@.Pconst_integerj&stringQ@@@v&optionL$charB@@@t@@@u@@7_248_2\@@LD@+Pconst_chark@@@s@@Ee Fe5@@ZE@-Pconst_stringl,@@@rK!t@@@q1<@@@o@@@p@@dfWYefW@@yF@,Pconst_floatmK@@@nIG@@@l@@@m@@|l<>}l<d@@G@@@A@@@@@^@@@@A@B@.location_stack!;@@@A$listK!t@@@w@@@x@@@@s  s 0@@@@H@A@)attribute";@@)attr_name@@(Asttypes#loc@@@{@@@|xbfxb}@@P@,attr_payload@@'payload%@@@zy~y~@@Q@(attr_loc@@!t@@@yzz@@R@@@A@@@@@wOO{@@@@I@A@)extension#;@@@A@<#loc@@@~@@@@3@@@}@@@@@@B l lB l @@@@J@B@*attributes$;@@@Aqe@@@@@@@@@@H  H  6@@@@K@B@M;@@$PStrՐ)structurec@@@@@K F HK F [@@-S@$PSig֐)signatureT@@@@@(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_desc0@@@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_bindingg@@@j@@@k@@@i@@_A//`A//@@t@-Pexp_functionߠ.function_param5@@@g@@@hK/type_constraint7@@@e@@@f-function_body6@@@d@@H1517I1J1@@@*Pexp_applyD@@@c @)arg_label@@@`@W@@@_@@a@@@b@@X44X44Y@@@*Pexp_matche@@@^,$case1@@@\@@@]@@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@@@@@ @@@!@@@@@@@@@.Pexp_letmodule1#loc|@@@@@@@@@+module_expra@@@k@@@@@@@@A;@@@1Pexp_letexception25extension_constructor?@@@@@@@@AbAdAbA@@@+Pexp_assert3@@@@@AAAA@@@)Pexp_lazy4@@@@@BVBXBVBq@@@)Pexp_poly5@@@͠@@@@@@@@BB BB@@ @+Pexp_object6/class_structureL@@@@@ CmCo CmC@@ $@,Pexp_newtype7t#loc@@@@@@@@@ @@ 'CC (CC@@ <@)Pexp_pack8@@@  @@@ @@@ @@ =CC >CD#@@ R@)Pexp_open90open_declaration\@@@ @@@@@ QDUDW RDUD@@ f@*Pexp_letop:%letop2@@@@@ aDD bDD@@ v@.Pexp_extension;@@@@@ nEIEK oEIEh@@ @0Pexp_unreachable<@@ wEyE{ xEyE@@ @@@A@@@@@ {:..@@@@ W@B@;@@&pc_lhs=@@D@@@s EE EE@@ @(pc_guard>@@ gH@@@q@@@r EE EE@@ @&pc_rhs?@@T@@@p EE EE@@ @@@A@@@@@ EE EF@@@@ X@B@P;@@$let_@@@*binding_op3@@@w F]Fa F]Fs@@ @$andsA@@ 8@@@u@@@v FtFx FtF@@ @$bodyB@@@@@t FF FF@@ @@@A@@@@@ FMFM FF@@@@ Y@B@(;@@'pbop_opC@@ @#loc @@@{@@@| FF FF@@ @(pbop_patD@@@@@z FF FF@@ @(pbop_expE@@@@@y FF FG @@ @(pbop_locF@@ !t@@@x GG GG(@@ (@@@A@@@@@ FF G)G,@@@@ ,Z@B@3function_param_desc4;@@*Pparam_valG )arg_label@@@ @@@@@@@@@@@ 9GHGJ :GHG@@ N@.Pparam_newtypeH #loc %@@@}@@@~@@ MII NIJ@@ b@@@A@@@@@ QG.G.@@@@ e[@B@;@@*pparam_locI@@ S!t@@@ bMsMw cMsM@@ w@+pparam_descJ@@P@@@ nMM oMM@@ @@@A@@@@@ rM^M^ sMM@@@@ \@B@;@@.Pfunction_bodyK 3@@@@@ MM MM@@ @/Pfunction_casesL @@@@@@ !t@@@ @@@@@ MM MN+@@ @@@A@@@@@ MM@@@@ ]@B@-;@@+PconstraintM @@@@@  OO  OO@@ @'PcoerceN  @@@@@@ @@@@@  OO  OO@@ @@@A@@@@@  OO@@@@ ^@B@1value_description8;@@)pval_nameO@@ 6#loc @@@@@@ PqPv PqP@@ @)pval_typeP@@ @@@ PP PP@@ @)pval_primQ@@ n @@@@@@ PP PP@@ @/pval_attributesR@@ ~@@@ PP PP@@ !@(pval_locS@@ !t@@@ Q Q Q Q#@@ /@@@A@@@@@ PSPS Q$Q)@@@@ 3_@B@0type_declaration9;@@*ptype_nameT@@ #loc @@@@@@ 6$RkRp 7$RkR@@ K@,ptype_paramsU@@ @ @@@@@ (variance@@@@ +injectivity@@@@@@@@@@ \%RR ]%RR@@ q@+ptype_cstrsV@@ ڠ@ :@@@@ ?@@@@ m!t@@@@@@@@ }'RR ~'RS"@@ @*ptype_kindW@@)type_kind:@@@ )S_Sd )S_Sz@@ @-ptype_privateX@@ ,private_flag@@@ *S{S *S{S@@ @.ptype_manifestY@@ v r@@@@@@ +SS +SS@@ @0ptype_attributesZ@@ %@@@ ,SS ,ST@@ @)ptype_loc[@@ !t@@@ -T>TC -T>TY@@ @@@A@@@@@ "RNRN .TZT_@@@@ `@B@C;@@.Ptype_abstract\@@ JY!Y# JY!Y3@@ @-Ptype_variant] R7constructor_declaration<@@@@@@@@ KY4Y6 KY4Ye@@ @,Ptype_record^ g1label_declaration;@@@@@@@@ LYfYh LYfY@@ @*Ptype_open_@@ MYY MYY@@ @@@A@@@@@ IYY@@@@ a@B@;@@(pld_name`@@ o#loc @@@@@@ QYY QYY@@ 3@+pld_mutablea@@ ,mutable_flag@@@ +RYZ ,RYZ@@ @@(pld_typeb@@ @@@ 6SZZ! 7SZZ5@@ K@'pld_locc@@ 5!t@@@ DTZ6Z; ETZ6ZO@@ Y@.pld_attributesd@@ @@@ OUZPZU PUZPZp@@ d@@@A@@@@@ SOYY TVZZ@@@@ hb@B@v;@@(pcd_namee@@ #loc A@@@@@@ id\~\ jd\~\@@ ~@(pcd_varsf@@  #loc W@@@@@@@@@ e\\ e\\@@ @(pcd_argsg@@5constructor_arguments=@@@ f\\ f\\@@ @'pcd_resh@@ l h@@@@@@ g\\ g\\@@ @'pcd_loci@@ !t@@@ h\] h\]@@ @.pcd_attributesj@@ )@@@ i]] i]]9@@ @@@A@@@@@ b\Z\Z j]]]b@@@@ c@B@6;@@+Pcstr_tuplek ? @@@@@@@@ m]] m]]@@ @,Pcstr_recordl Q@@@@@@@@ n]] n]]@@ @@@A@@@@@ l]d]d@@@@ d@B@.type_extension>;@@+ptyext_pathm@@ O#loc !t@@@@@@̰ `` ``@@ @-ptyext_paramsn@@ ~@ @@@Ƞ@@ t(variance@@@Ơ@ {+injectivity@@@@@@@@@@ʰ &`` '``@@ ;@3ptyext_constructorso@@ m@@@@@@İ 6`` 7`a&@@ K@.ptyext_privatep@@ ,private_flag@@@° Ca'a, Da'aI@@ X@*ptyext_locq@@ B!t@@@ QaJaO RaJaf@@ f@1ptyext_attributesr@@ @@@ \agal ]aga@@ q@@@A@@@@@ `}`r`r aaa@@@@ ue@B@;@@)pext_names@@ #loc N@@@@@@Ѱ vb=bB wb=bX@@ @)pext_kindt@@:extension_constructor_kindA@@@ϰ bYb^ bYb@@ @(pext_locu@@ !t@@@ΰ bb bb@@ @/pext_attributesv@@ @@@Ͱ bb bb@@ @@@A@@@@@ bb bb@@@@ f@B@.type_exception@;@@2ptyexn_constructorw@@@@@԰ cc cc3@@ @*ptyexn_locx@@ !t@@@Ӱ c4c8 c4cP@@ @1ptyexn_attributesy@@ =@@@Ұ cQcU cQct@@ @@@A@@@@@ bb cc@@@@ g@B@T;@@)Pext_declz S <#loc @@@@@@@@@ܠe@@@٠ Ǡ @@@@@@@@ cc cd>@@@+Pext_rebind{ ^#loc !t@@@@@@@@gggg@@$@@@A@@@@@cc@@@@'h@B@*class_typeB;@@)pcty_desc|@@/class_type_descC@@@߰&hhhm'hhh@@;@(pcty_loc}@@%!t@@@ް4hh5hh@@I@/pcty_attributes~@@ @@@ݰ?hh@hh@@T@@@A@@@@@ChQhQDhh@@@@Xi@B@&;@@+Pcty_constr #loc a!t@@@@@@ Ԡ 0@@@@@@@@fiigii4@@{@.Pcty_signature/class_signatureD@@@@@vijilwiji@@@*Pcty_arrow )arg_label@@@ T@@@u@@@@@iiii@@@.Pcty_extension @@@@@kVkXkVku@@@)Pcty_open0open_description[@@@"@@@@@kkkk@@@@@A@@@@@hh@@@@j@B@E;@@*pcsig_self@@ @@@kkkl@@@,pcsig_fields@@?0class_type_fieldE@@@@@@ll ll0@@@@@A@@@@@kkl1l6@@@@k@B@;@@)pctf_desc@@5class_type_field_descF@@@m5m:m5m[@@@(pctf_loc@@!t@@@m\mam\mv@@ @/pctf_attributes@@ u@@@mwm|mwm@@@@@A@@@@@mmmm@@@@l@B@&;@@,Pctf_inherit@@@@@mmmm@@-@(Pctf_val@#loc%label@@@@@@@,mutable_flag@@@@,virtual_flag@@@@@@@@@@@DnnEnnW@@Y@+Pctf_method@#loc%label@@@@@@@,private_flag@@@@,virtual_flag@@@@;@@@@@@@pnpnrqnpn@@@/Pctf_constraint@L@@@@Q@@@@@@@o&o(o&oT@@@.Pctf_attribute@@@@@orotoro@@@.Pctf_extension @@@@@oooo@@@@@A@@@@@mm@@@@m@B@+class_infosG;!a@@A(pci_virt@@,virtual_flag@@@ooop@@@*pci_params@@9@@@@ @@/(variance@@@ @6+injectivity@@@@@ @@ @@@ ppppN@@@(pci_name@@D#loc@@@@@@pOpTpOpi@@ @(pci_expr@@Npjpopjp|@@ @'pci_loc@@!t@@@ p}p p}p@@ @.pci_attributes@@@@@pppp@@) @@@A@Y@@@@@oopp@@@@/n@B@1class_descriptionH;@@@A@@@@@@@@@@-qq.qq@@@@Bo@B@6class_type_declarationI;@@@A@@@@@@@@@@?qq@qr @@@@Tp@B@*class_exprJ;@@(pcl_desc@@/class_expr_descK@@@SrZr_TrZry@@h @'pcl_loc@@R!t@@@arzrbrzr@@v@.pcl_attributes@@@@@lrrmrr@@@@@A@@@@@prCrCq rr@@@@q@B@&;@@*Pcl_constr#loc!t@@@,@@@-]@@@*@@@+@@ rr rs"@@@-Pcl_structure@@@)@@sLsNsLsp@@@'Pcl_fun)arg_label@@@(g@@@&@@@'w@@@%{@@@$@@ssss@@@)Pcl_apply@@@#E@2)arg_label@@@ @@@@@@!@@@"@@v~vv~v@@@'Pcl_letG(rec_flag@@@h @@@@@@>@@@@@&ww&ww@@@.Pcl_constraintK@@@@@@@@-yGyI-yGyt@@$@-Pcl_extensionD@@@@@.yy.yy@@1@(Pcl_open@@@m@@@@@-/yy./yy@@B@@@A@@@@@1 rr@@@@Er@B@*;@@*pcstr_self@@@@@0?3zz#@3zz7@@T@,pcstr_fields@@+class_fieldM@@@.@@@/R4z8z=S4z8z\@@g@@@A@@@@@V1zzW5z]zb@@@@ks@B@;@@(pcf_desc@@0class_field_descN@@@3h>{Z{_i>{Z{z@@}@'pcf_loc@@g!t@@@2v?{{{w?{{{@@@.pcf_attributes@@@@@1@{{@{{@@@@@A@@@@@<{B{BA{{@@@@t@B@&;@@+Pcf_inherit-override_flag@@@H@@@Gs#loc@@@D@@@E@@@F@@D{{D{|7@@@'Pcf_val@#loc%label@@@A@@@B@",mutable_flag@@@@@0class_field_kindO@@@?@@C@@S~~S~~@@@*Pcf_method@=#locB%label@@@<@@@=@J,private_flag@@@;@(@@@:@@>@@bb6@@@.Pcf_constraint@@@@8@@@@7@@9@@hhI@@$ @/Pcf_initializer@@@6@@igiig@@1!@-Pcf_attribute'@@@5@@)j*j@@>"@-Pcf_extension^@@@4@@6k7k@@K#@@@A@@@@@:C{{@@@@Nu@B@n;@@+Cfk_virtual@@@K@@JnKn9@@_$@,Cfk_concrete-override_flag@@@J @@@I@@]o:<^o:h@@r%@@@A@@@@@am@@@@uv@B@1class_declarationP;@@@AF@@@L@@@M@@@@rqjjsqj@@@@w@B@+module_typeQ;@@)pmty_desc@@0module_type_descR@@@Pxx#@@&@(pmty_loc@@!t@@@Oy$)y$>@@'@/pmty_attributes@@@@@Nz?Dz?`@@(@@@A@@@@@v{@@@@x@B@&;@@*Pmty_ident #loc!t@@@[@@@\@@~~@@)@.Pmty_signature@@@Z@@@@*@,Pmty_functor1functor_parameterS@@@Yf@@@X@@O@@+@)Pmty_with@@@Wc/with_constraint`@@@U@@@V@@wyw@@ ,@+Pmty_typeof Q@@@T@@@@-@.Pmty_extension:@@@S@@@@'.@*Pmty_aliasw#loc,!t@@@Q@@@R@@(,.),M@@=/@@@A@@@@@,}@@@@@y@B@Z;@@$Unit@@8|~9|@@M0@%Named#loc(@@@^@@@_@@@`w@@@]@@UV@@j1@@@A@@@@@Ydd@@@@mz@B@9;@@@Aנ.signature_itemU@@@a@@@b@@@@lLLmLo@@@@{@B@ ;@@)psig_desc@@3signature_item_descV@@@d~@@2@(psig_loc@@}!t@@@c@@3@@@A@@@@@qq@@@@|@B@;@@*Psig_value@@@{@@@@4@)Psig_type(rec_flag@@@z(@@@x@@@y@@bdb@@5@.Psig_typesubst;@@@v@@@w@@@@6@+Psig_typext@@@u@@(*(I@@7@.Psig_exceptionA@@@t@@cec@@8@+Psig_module2module_declarationW@@@s@@@@9@-Psig_modsubst3module_substitutionX@@@r@@  @@:@.Psig_recmoduleÐ$@@@p@@@q@@575b@@0;@,Psig_modtypeĐ7module_type_declarationY@@@o@@+,@@@<@1Psig_modtypesubstŐ@@@n@@89-@@M=@)Psig_openƐ@@@m@@ETVFTu@@Z>@,Psig_includeǐ3include_description^@@@l@@UV@@j?@*Psig_classȐՠF@@@j@@@k@@hi@@}@@/Psig_class_typeɐF@@@h@@@i@@{ "| R@@A@.Psig_attributeʐ@@@g@@@@B@.Psig_extensionː@@@f @@@e@@@@C@@@A@@@@@@@@@}@B@;@@(pmd_name@@#loc@@@@@@@@@ % A@@D@(pmd_type@@@@@~BGB]@@E@.pmd_attributes@@?@@@}^c^~@@F@'pmd_loc@@!t@@@|@@G@@@A@@@@@@@@@~@B@;@@(pms_name@@F#loc@@@@@@!&!;@@ H@,pms_manifest@@X#loc !t@@@@@@ <A <_@@I@.pms_attributes@@@@@`e`@@)J@'pms_loc@@!t@@@"#@@7K@@@A@@@@@&'@@@@;@B@;@@)pmtd_name@@#loc@@@@@@<(-=(C@@QL@)pmtd_type@@m@@@@@@LDIMDg@@aM@/pmtd_attributes@@@@@WhmXh@@lN@(pmtd_loc@@V!t@@@ef@@zO@@@A@@@@@ij@@@@~@@B@*open_infosZ;!a@@A*popen_expr@@ |}@@P@.popen_override@@-override_flag@@@@@Q@)popen_loc@@!t@@@@@R@0popen_attributes@@@@@ @@S@@@A@Y@@@@@!&@@@@A@B@;@@@AE#loc!t@@@@@@@@@@@@@@@@@B@B@ ~;@@@A @@@@@@@@@@(((U@@@@C@B@-include_infos];!a@@A)pincl_mod@@ @@T@)pincl_loc@@!t@@@@@U@0pincl_attributes@@p@@@<@@V@@@A@Y@@@@@=B@@@@D@B@;@@@A86@@@@@@@@@@DDDw@@@@*E@B@3include_declaration_;@@@A r@@@@@@@@@@'(@@@@<F@B@9;@@*Pwith_typeߐ#locE!t@@@@@@@@@@@ELNFL@@ZW@,Pwith_module#loc_!t@@@@@@#locl!t@@@@@@@@hiI@@}X@-Pwith_modtypeᐠ#loc!t@@@@@@@@@@@mom@@Y@2Pwith_modtypesubst␠#loc!t@@@@@@@@@@@@@Z@/Pwith_typesubst㐠#loc!t@@@@@@@@@@@/1/h@@[@.Pwith_modsubst䐠#loc!t@@@@@@(#loc!t@@@@@@@@@@\@@@A@@@@@66@@@@G@B@.;@@)pmod_desc@@0module_expr_descb@@@ UZ Uv@@]@(pmod_loc@@!t@@@w|w@@^@/pmod_attributes@@y@@@@@_@@@A@@@@@  == @@@@ H@B@&;@@*Pmod_ident萠t#loc)!t@@@@@@@@%&@@:`@.Pmod_structure鐠@@@@@2 3=@@Ga@,Pmod_functorꐠh@@@@@@@@CWYDW@@Xb@*Pmod_apply될@@@@@@@@TU@@ic@/Pmod_apply_unit쐠@@@@@ab@@vd@/Pmod_constraint퐠@@@@@@@@r!#s!Q@@e@+Pmod_unpack/@@@@@fhf@@f@.Pmod_extension@@@@@@@g@@@A@@@@@@@@@I@B@;@@@A.structure_itemd@@@@@@@@@@@@@@J@B@ ;@@)pstr_desc@@3structure_item_desce@@@İ! !+@@h@(pstr_loc@@!t@@@ð",1",F@@i@@@A@@@@@#GL@@@@K@B@;@@)Pstr_eval@@@ܠN@@@@@&hj&h@@j@*Pstr_valueA(rec_flag@@@ڠb@@@@@@@@''@@ k@.Pstr_primitive`@@@@@. .E@@l@)Pstr_typef(rec_flag@@@֠_@@@@@@@@11@@.m@+Pstr_typextL@@@@@&3'3@@;n@.Pstr_exceptionK@@@@@34-/44-Q@@Ho@+Pstr_module.module_bindingh@@@@@C7D7@@Xp@.Pstr_recmoduleà@@@@@@@@U8V8@@jq@,Pstr_modtype:@@@@@b:24c:2]@@wr@)Pstr_open%@@@@@o;{}p;{@@s@*Pstr_class@@@@@@@@<<@@t@/Pstr_class_type@@@@@@@@>  > <@@u@,Pstr_include@@@@@@wy@w@@v@.Pstr_attribute@@@@@AA@@w@.Pstr_extension@@@Ơ2@@@@@BB@@x@@@A@@@@@%NN@@@@L@B@0value_constraintf;@@.Pvc_constraint8locally_abstract_univars@@L5#loc@@@@@@@@@FW]FW@@y@#typ@@@@@GG@@z@@@E?AH@@ {@,Pvc_coercion&ground@@נ@@@@@@߰ I I@@|@(coercion@@@@@ݰII@@)}@@@II@@-~@@@A@@@@@D((@@@@0M@B@;@@'pvb_pat@@@@@*V+V@@?@(pvb_expr@@@@@5W6W@@J@.pvb_constraint @@{@@@@@@FXGXF@@[@.pvb_attributes @@@@@QYGKRYGf@@f@'pvb_loc @@P!t@@@_Zgk`Zg@@t@@@A@@@@@cTd[@@@@xN@B@);@@(pmb_name @@#locJU@@@@@@@@@~__@@@(pmb_expr @@@@@``@@@.pmb_attributes@@@@@a a&@@@'pmb_loc@@!t@@@b',b'@@@@@@A@@@@@]cAF@@@@O@B@/toplevel_phrasei;@@(Ptop_def@@@@@kk@@@(Ptop_dir2toplevel_directivej@@@@@ll@@@@@A@@@@@j@@@@@A@ ;@@)pdir_name@@3#loc@@@@@@pJNpJd@@@(pdir_arg@@2directive_argumentk@@@@@@qeiqe@@ @(pdir_loc@@!t@@@rr@@@@@A@@@@@n--s@@@@@B@;@@*pdira_desc@@7directive_argument_descl@@@ww@@.@)pdira_loc@@!t@@@'x(x @@<@@@A@@@@@+u,y@@@@@@B@;@@+Pdir_string@@@@@=|13>|1J@@R@(Pdir_int$@@@" @@@@@@@@U}KMV}Ko@@j@*Pdir_identj!t@@@@@e~prf~p@@z@)Pdir_bool@@@@@st@@@@@A@@@@@w{@@@@@B@@RZP)Parsetree0Z<4$PC(Warnings0;w.Q=1-Stdlib__Uchar0d"W-x9.Stdlib__Domain0iW',P6wz.Stdlib__Buffer0_?K|/V>O}~Nࠠ&Stdlib0y{x!O!)Longident0@#j,6.Nt蠠(Location0nݹV 2f-V *Format_doc0Mv9630A 0CamlinternalLazy0;x#5䢜hLm8CamlinternalFormatBasics0oZ2t,ݠ(Asttypes0E\eǥ]k6e@@@Caml1999T036AaO0C)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 @@@i@ @@@@]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 @@@j@ @@@@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@@@@@:.. EyE@@@@8W@$caseC;@@@A@@@@@'EE(EF@ D Values of type {!case} represents [(P -> E)] or [(P when E0 -> E)] 5FF6FFK@@@@@@@@@NX@%letopC;@@@A@@@@@=FMFM>FF@@@@VY@*binding_opC;@@@A@@@@@EFFFG)G,@@@@^Z@3function_param_descC;@@@A@@@@@MG.G.NIJ@@@@f[@.function_paramC;@@@A@@@@@UM^M^VMM@@@@n\@-function_bodyC;@@@A@@@@@]MM^MN+@P G See the comment on {{!expression_desc.Pexp_function}[Pexp_function]}. kO9O9lO9O@@@@@@@@@]@/type_constraintC;@@@A@@@@@s OOt OO@@@@^@1value_descriptionC;@@@A@@@@@{PSPS|Q$Q)@󐠠8 {2 Value descriptions} P4P4P4PQ@@@@@@| 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"]] Q*Q*R,R.@@@@@@@@@_@0type_declarationC;@@@A@@@@@"RNRN.TZT_@7 {2 Type declarations}  R0R0 R0RL@@@@@@  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]. /T`T`GY Y@@@@@@@@@`@)type_kindC;@@@A@@@@@IYYMYY@@@@a@1label_declarationC;@@@A@@@@@OYYVZZ@  - [{ ...; 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]}. WZZ`\V\X@@@@@@@@@b@7constructor_declarationC;@@@A@@@@@b\Z\Zj]]]b@@@@c@5constructor_argumentsC;@@@A@@@@@l]d]dn]]@@@@d@.type_extensionC;@@@A@@@@@}`r`raa@䐠 c Definition of new extensions constructors for the extensive sum type [t] ([type t += ...]). aabb@@@@@@@@@e@5extension_constructorC;@@@A@@@@@bbbb@@@@ f@.type_exceptionC;@@@A@@@@@bbcc@ 0 Definition of a new exception ([exception E]). cccc@@@@@@@@@6g@:extension_constructor_kindC;@@@A@@@@@%cc&gg@@@@>h@*class_typeC;@@@A@@@@@-hQhQ.hh@4 {1 Class language} ;hh<hh@@@@@@ - {2 Type expressions for the class language} IhhJhhO@@@@@@@@@bi@/class_type_descC;@@@A@@@@@QhhRkk@@@@jj@/class_signatureC;@@@A@@@@@YkkZl1l6@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]} gl7l7hmm@@@@@@@@@k@0class_type_fieldC;@@@A@@@@@ommpmm@@@@l@5class_type_field_descC;@@@A@@@@@wmmxoo@@@@m@+class_infosC;@@ @A@A@G@B@@@oopp@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. ppqq@@@@@@@@@n@1class_descriptionC;@@@A @@@k@ @@@@qqqq@@@@o@6class_type_declarationC;@@@A @@@l@ @@@@qqqr @@@@p@*class_exprC;@@@A@@@@@rCrC rr@0 . {2 Value expressions for the class language} rrrrA@@@@@@@@@q@/class_expr_descC;@@@A@@@@@ rr/yy@@@@r@/class_structureC;@@@A@@@@@1zz5z]zb@ɐ 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]} 6zczc:{>{@@@@@@@@@@s@+class_fieldC;@@@A@@@@@<{B{BA{{@@@@t@0class_field_descC;@@@A@@@@@C{{k@@@@ u@0class_field_kindC;@@@A@@@@@mo:h@@@@v@1class_declarationC;@@@A @@@m@ @@@@ qjj qj@@@@$w@+module_typeC;@@@A@@@@@v{@5 {1 Module language} !s"s@@@@@@ . {2 Type expressions for the module language} /t0t@@@@@@@@@Hx@0module_type_descC;@@@A@@@@@7}8,M@@@@Py@1functor_parameterC;@@@A@@@@@?dd@@@@@Xz@)signatureC;@@@A @@@n@ @@@@NLLOLo@@@@g{@.signature_itemC;@@@A@@@@@VqqW@@@@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 @@@o@ @@@@@ T Values of type [open_description] represents: - [open M.N] - [open M(N).O] &@@@@@@@@@B@0open_declarationC;@@@A @@@p@ @@@@(((U@ڐ p Values of type [open_declaration] represents: - [open M.N] - [open M(N).O] - [open struct ... end] VV@@@@@@@@@C@-include_infosC;@@ @A@A@G@B@@@=B@@@@D@3include_descriptionC;@@@A @@@q@ @@@@DDDw@ > Values of type [include_description] represents [include MT] xx x@@@@@@@@@8E@3include_declarationC;@@@A @@@r@ @@@@./@! > Values of type [include_declaration] represents [include ME] <=4@@@@@@@@@UF@/with_constraintC;@@@A@@@@@D66E@@@@]G@+module_exprC;@@@A@@@@@L ==M@Đ / {2 Value expressions for the module language} Z [ ;@@@@@@@@@sH@0module_expr_descC;@@@A@@@@@bc@@@@{I@)structureC;@@@A @@@s@ @@@@qr@@@@J@.structure_itemC;@@@A@@@@@yz#GL@@@@K@3structure_item_descC;@@@A@@@@@%NNB@@@@L@0value_constraintC;@@@A@@@@@D((I@@@@M@-value_bindingC;@@@A@@@@@T[@ # [let pat : type_constraint = exp]  [@@@@@@@@@N@.module_bindingC;@@@A@@@@@]cAF@ < Values of type [module_binding] represents [module X = ME] dGGdG@@@@@@@@@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 >}] |@@}@@@@@@@@@@.Pexp_letmodule1 #loc_@@@ Q@@@ S@@@ UQ@@@ V@@@ W@@@@@A;@: [let module M = ME in E] A<ABA<Aa@@@@@@@@1Pexp_letexception2@@@ X@@@ Y@@AbAdAbA@8 [let exception C in E] AAAA@@@@@@@@+Pexp_assert3@@@ Z@@AAAA@ϐ j [assert E]. Note: [assert false] is treated in a special way by the type-checker. AAB:BU@@@@@@@@)Pexp_lazy4@@@ [@@BVBXBVBq@될* [lazy E] BVBsBVB@@@@@@@@)Pexp_poly5@@@ \z@@@ ]@@@ _@@BBBB@ Used for method bodies. Can only be used as the expression under {{!class_field_kind.Cfk_concrete}[Cfk_concrete]} for methods (not values). ,BB-CVCl@@@@@@@E@+Pexp_object6g@@@ `@@:CmCo;CmC@-2 [object ... end] HCmCICmC@@@@@@@a@,Pexp_newtype7#loc'@@@ a@@@ c[@@@ d@@aCCbCC@T5 [fun (type t) -> E] oCCpCC@@@@@@@@)Pexp_pack84@@@ e@@@ f@@@ h@@CCCD#@z % [(module ME)] or [(module ME : S)]. D$D*D$DT@@@@@@@@)Pexp_open9@@@ i@@@ j@@DUDWDUD@ L - [M.(E)] - [let open M in E] - [let open! M in E] DDDD@@@@@@@@*Pexp_letop:@@@ k@@DDDD@ I - [let* P = E0 in E1] - [let* P0 = E00 and* P1 = E01 in E1] DDEEH@@@@@@@@.Pexp_extension;@@@ l@@EIEKEIEh@Ӑ) [[%id]] EIEjEIEx@@@@@@@@0Pexp_unreachable<@@EyE{@鐠% [.] EyEEyE@@@@@@@@@@A@@@@@@@@@#ll ;.. ;..@O@гno;..f@гp)Longident;.. ;..@w#;..$;..@@@@@@  x@@@@z8xw@ww@@@w@w@#ss7>//!8>//.@^@гu(constantA>//2v@@|;w@@@@y4Swv@vv@@@v@v@#rrRA//SA//@M@гtu[A//\A//@@{V@@гw$listeA//fA//@г|-value_bindingnA//oA//@@i@@@j @@г*expressionyA//@@s@@@@l@@@@@@#~~H1519H151F@U@г$listI1J1_I1J1c@г.function_paramI1J1PI1J1^@@@@@ @@г&optionI1J1vI1J1|@г/type_constraintI1J1fI1J1u@@@@@ @@г-function_bodyI1J1@@@@@@ΐ@@@@@@#X44!X44+@g@г*expressionX44/X449@@Ұ@@г$listX44U@В@гX44=X44F@@@@@г*expressionX44IX44S@@@@@@@@X44<@@@@ @@@@@@# c55 c56@@г*expression c56 c56@@@@г$list c56@г$case (c56 )c56@@#@@@$@@@@ <@@@@@@# ;e6T6X <e6T6`@@г*expression Ee6T6d Fe6T6n@@@@@г$list Oe6T6v@г$case We6T6q Xe6T6u@@R@@@S@@@@L k@@@@@@# jg66 kg66@@г$list tg66@В@г&option g66 g66@г&string g66 g66@@@@@ @@@г*expression g66 g66@@@@@@@@ g66@@@@Ƞ @@@@@@# r8L8P r8L8^@@гàİ r8L8n r8L8q@гƠ)Longident r8L8b r8L8k@Ͱ r8L8l r8L8m@@@@@@ @@гР&option r8L8@гԠ*expression r8L8t r8L8~@@Ѱ@@@Ұ@@@@٠ ꐠ@@@@@@#ҠҰ x9x9| x9x9@@гԠհ x9x9 x9x9@@@@гנ&option x9x9@г۠*expression!x9x9!x9x9@@@@@@@@@࠰!@@@@@@#٠ٰ!}:5:9!}:5:D@@г۠$list!!}:5:g!"}:5:k@В@гࠐ!-}:5:U!.}:5:X@г㠡)Longident!8}:5:I!9}:5:R@!<}:5:S!=}:5:T@@@8@@@9 @@@г*expression!I}:5:[!J}:5:e@@D@@@E@@@ F!N}:5:H-@@г&option!V}:5:y@г*expression!^}:5:n!_}:5:x@@Y@@@Z@@@@S!r@@@@@@#!q;z;~!r;z;@@г*expression!{;z;!|;z;@@v@@г!;z;@г)Longident!;z;!;z;@!;z;!;z;@@@@@@ @@@@ !@@@@@@#!;;!;;@@г*expression!;;!;;@@ @@г  !;;!;;@г )Longident!;;!;;@!;;!;;@@@İ@@@!Ű @@г*expression!;;@@ΰ@@@@!搠@@@@@@#!<<!<<@@г$list!<<-@г*expression!<<"!<<,@@!@@@&@@@@" @@@@@@#" ?"=<=p"=<=~@@E@@гA*expression"=<=B@@HC@@@@E "АCB@BB@@@B@B@#>>">>">>@$@г@*expression">>">>@@H԰@@гE)core_type">>F@@LݰG@@@@I "GF@FF@@@F@F@#BB"? ?"? ?@@гD*expression"? ? "? ?*@@L@@гI&option#? ?7# ? ?=@гN)core_type#? ?-#? ?6@@V @@@[  @@гS)core_type#? ?@T@@ZU@@@@W!#.UT@TT@@@T@T@#PP#-??#.??@/@гR*expression#7?@#8?@ @@Z2@@гWX#@?@P@гYZ#G?@#H?@@@`B@@@fCZ@@@@\!<#[ZY@YY@@@Y@Y@#UU#Z@*@.#[@*@6@8@гWX#c@*@FO@гY)Longident#m@*@:#n@*@C@`#q@*@D#r@*@E@@@hm@@@nn a@@@@c!g#a`@``@@@`@`@#\\#@\@`#@\@o@;@г^_#@\@y#@\@|@гab#@\@s#@\@x@@h@@@n @@гd*expression#@\@e@@kf@@@@h!#fe@ee@@@e@e@#aa#@@#@@@6@гc$list#@@N@В@гgh#@@#@@@гjk#@@#@@@@qʰ@@@w˰ @@@гm*expression#@@#@@@@uְ@@@װ@@@ذ#@@r@@@@t!#񐠠rq@qq@@@q@q@#mm#@@#@A @C@гop#@A#@A @гr&option$@A$@A@гw&string$ @A$ @A@@ @@@  @@@ @@г|+module_expr$@A#$@A.@@ @@г*expression$!@A1@@ @@@@"$3@@@@@@#~~$2AbAf$3AbAw@d@г5extension_constructor$<AbA{$=AbA@@ 7@@г*expression$FAbA@@ @@@@@"9$X@@@@@@#$WAA$XAA@m@г*expression$aAA@@ [@@@@"T$s@@@@@@#$rBVBZ$sBVBc@l@г*expression$|BVBg@@ v@@@@"o$@@@@@@#$BB$BB@a@г*expression$BB$BB@@ @@г&option$BB@г)core_type$BB$BB@@ @@@ @@@@"$@@@@@@#$CmCq$CmC|@t@г/class_structure$CmC@@ @@@@"$ؐ@@@@@@#$CC$CC@h@г$CC$CC@г&string$CC$CC@@ @@@  @@г*expression$CC@@ @@@@"%@@@@@@#%CC%CC@p@г+module_expr%CD%CD @@! @@г&option%CD@г,package_type%!CD%"CD@@!@@@!@@@@#%5@@@@@@#%4DUDY%5DUDb@~@г0open_declaration%>DUDf%?DUDv@@!9@@г*expression%HDUDy@@!B@@@@#;%Z@@@@@@#%YDD%ZDD@@г%letop%cDD@@!]@@@@#V%u@@@@@@#%tEIEM%uEIE[@@г)extension%~EIE_@@!x@@@@#q%@@@@@@#%EyE} p@@@@#%@@@@@@@A@ ~@+ | |%EE%EE@@;@@&pc_lhs=@@ @@@ m%EE%EE@@%@(pc_guard>@@% @@@ p@@@ r%EE%EE@@%@&pc_rhs?@@ @@@ u%EE%EE@@%@@@A@@@@@  @@ @#**%%EE@$@@Ш@г-'pattern%EE%EE@@5!ְ@@8@@ n!@4@#00&%EE@%@@Ш@г3&option%EE%EE@г8*expression%EE%EE@@@!@@@E! @@H@@ s!@?@#;;6&EE@5@@Ш@г>*expression& EE& EE@@F"@@I@@ v"@E@@A@ 蠰#&  @  @@@ @ @+  &FMFQ&FMFV@@;@@$let_@@@ @@@ x&*F]Fa&+F]Fs@@&C@$andsA@@% @@@ {@@@ }&;FtFx&<FtF@@&T@$bodyB@@!A@@@ &GFF&HFF@@&`@@@A@@@@@!@@@! @#**%&OF]Fe@$@@Ш@г-*binding_op&XF]Fh&YF]Fr@@5"S@@8@@ y"V@4@#00&&aFtF|@%@@Ш@г3$list&jFtF&kFtF@г8*binding_op&sFtF&tFtF@@@"n@@@E"o @@H@@ ~"r@?@#;;6&}FF@5@@Ш@г>*expression&FF&FF@@F"@@I@@ "@E@@A@!O@+!M!M&FF&FF@@;@@'pbop_opC@@%#loc&m@@@ @@@ &FF&FF@@&@(pbop_patD@@!@@@ &FF&FF@@&@(pbop_expE@@!@@@ &FF&FG @@&@(pbop_locF@@%!t@@@ &GG&GG(@@&@@@A@@@@@!@@@!@#99.&FF@-@@Ш@г<=&FF&FF@г?&string&FF&FF@@G"ܰ@@@M"ݰ @@P@@ "@F@#BB=&FF@<@@Ш@гE'pattern&FF&FF@@M"@@P@@ "@L@#HHC&FF@B@@Ш@гK*expression'FG'FG @@S#@@V@@ #@R@#NNG'GG@F@@Ш@гQ(Location'GG'GG%@X'GG&'GG'@@@`#@@c@@ #@]@@A@!@+!ޠ!ް'(G.G2')G.GE@@;@@*Pparam_valG%)arg_label@@@ &";@@@ @@@ "_@@@ @@'GGHGJ'HGHG@%: \ [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. 'UGG'VII@@@@@@@'n@.Pparam_newtypeH%#loc'4@@@ @@@ @@'iII"@%[ 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. 'vJJ 'wMXM\@@@@@@@'@@@A@@@@@"-@@@"*@#NN'~GHGL'GHGV@)@гPQ'GHGZ'GHGc@@W#@@гS&option'GHGq'GHGw@гX*expression'GHGf'GHGp@@`#@@@e# @@г]'pattern'GHGz^@@d#_@@@@a%'_^@^^@@@^@^@#ZZ'II'II@@@г\]'IJ"r@г^&string'II'IJ@@f#°@@@l#ð"}@@@@c%'ېba@aa@@@a@a@@A@"@+""'M^Mb'M^Mp@@;@@*pparam_locI@@&9!t@@@ 'MsMw'MsM@@(@+pparam_descJ@@"@@@ 'MM'MM@@(@@@A@@@@@"@@@"@#'MsM@@@Ш@г(Location(MsM( MsM@%( MsM( MsM@@@-$@@0@@ $ @*@#&&!(MM@ @@Ш@г)3function_param_desc(MM( MM@@1$@@4@@ $@0@@A@"@+"Π"ΰ((MM()MM@@;@@.Pfunction_bodyK#1@@@ @@(7MM(8MM@@(P@/Pfunction_casesL'à#%@@@ @@@ &!t@@@ #@@@ @@(VMM"@&H  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. (cN,N.(dO4O8@@@@@@@(|@@@A@@@@@# #@@"@#;;(kMM(lMM@4@г=*expression(uMM>@@D$o?@@@@A@#==({MM(|MN@@г?$list(MN (MN@гD$case(MN(MN @@L$@@@Q$ @@гI(Location(MN(MN@P(MN(MN@@@X$@@гS*attributes(MN!#M@@Z$#N@@@@W&(VU@UU@@@U@U@@A@#[&(ǐ#Y#X@#X#X@@@#X@#X@+#V#V( OO( OO@@;@@+PconstraintM$P@@@ @@( OO( OO@@(@'PcoerceN(D$b@@@ @@@ $h@@@ @@( OO#z@&ߐ G See the comment on {{!expression_desc.Pexp_function}[Pexp_function]}. ( OO( OP2@@@@@@@)@@@A@@@@@#@@@#@#44) OO) OO@-@г6)core_type)  OO7@@=%8@@@@:@#66) OO) OO@@г8&option) OO) OO@г=)core_type)% OO)& OO@@E% @@@J%! @@гB)core_type)0 OO#@@I%*#@@@@F'#)BED@DD@@@D@D@@A@#@+#ɠ#ɰ)APSPW)BPSPh@@;@@)pval_nameO@@'#loc)@@@ @@@ )TPqPv)UPqP@@)m@)pval_typeP@@$@@@ )`PP)aPP@@)y@)pval_primQ@@()<@@@ @@@ )qPP)rPP@@)@/pval_attributesR@@% @@@ )}PP)~PP@'p; [... [\@\@id1] [\@\@id2]] )PP)PQ@@@@@@@)@(pval_locS@@'!t@@@ )Q Q)Q Q#@@)@@@A@@@@@$"$@@$@#XXM)PqP@L@@Ш@г[\)PqP)PqP@г^&string)PqP)PqP@@f%@@@l% @@o@@ %@e@#aa\)PP@[@@Ш@гd)core_type)PP)PP@@l%@@o@@ %@k@#gg])PP@\@@Ш@гj$list)PP)PP@гo&string)PP)PP@@w%۰@@@|%ܰ @@@@ %@v@#rrm)PP@^@@Ш@гu*attributes)PP)PP@@}%@@@@ %@|'*zy@yy@@@y@y@#uun*Q Q@m@@Ш@гx(Location*Q Q*Q Q @*Q Q!*Q Q"@@@&@@@@ &@@@A@$*-*,$$@$$@@@$@$(*7$$@$$@@@$@$@+$$*6"RNRR*7"RNRb@@;@@*ptype_nameT@@(#loc*@@@ @@@ ǰ*I$RkRp*J$RkR@@*b@,ptype_paramsU@@)Ӡ@%@@@ ʠ@@((variance@@@ ˠ@(+injectivity@@@ @@ @@ @@@ а*p%RR*q%RR@(c2 [('a1,...'an) t] *~&RR*&RR@@@@@@@*@+ptype_cstrsV@@*@& @@@ Ӡ@&@@@ Ԡ@(!t@@@ @@ @@@ ذ*'RR*'RS"@( 0 [... constraint T1=T1' ... constraint Tn=Tn'] *(S#S)*(S#S^@@@@@@@*@*ptype_kindW@@$@@@ ۰*)S_Sd*)S_Sz@@*@-ptype_privateX@@)I,private_flag@@@ ް**S{S**S{S@(5 for [= private ...] **S{S**S{S@@@@@@@*@.ptype_manifestY@@*C&a@@@ @@@ *+SS*+SS@(ڐ2 represents [= T] *+SS*+SS@@@@@@@+@0ptype_attributesZ@@&@@@ +,SS+,ST@(; [... [\@\@id1] [\@\@id2]] +,ST+,ST=@@@@@@@+(@)ptype_loc[@@)m!t@@@ +-T>TC+-T>TY@@+6@@@A@@@@@%%@@%c@#+%$RkRz@@@Ш@гꠐ+-$RkR+.$RkR@г&string+6$RkR|+7$RkR@@'1@@@'2 @@@@ '5@@#+@%RR@@@Ш@г$list+I%RR+J%RR@В@г)core_type+V%RR+W%RR@@'Q@@@В@г+d%RR+e%RR@@'_@@@г+n%RR+o%RR@@'i@@@'j@@@'k+s%RR@@@$'m+u%RR,@@(@@ 'q@ )i+@@@@@@#+'RR@@@Ш@г$list+'RS+'RS!@В@г )core_type+'RR+'RS@@'@@@г)core_type+'RS+'RS@@'@@@г(Location+'RS+'RS@+'RS+'RS@@@#'@@@4'!@@@9'+'RR/@@=@@ '@")+Ґ @@@@@@#+)S_Sn@@@Ш@г)type_kind+)S_Sp+)S_Sy@@&'հ@@)@@ '@%@#!!+*S{S@ @@Ш@г$%+*S{S+*S{S@@+'@@.@@ '@)),'&@&&@@@&@&@#""++SS@ @@Ш@г%&option,+SS, +SS@г*)core_type,+SS,+SS@@2( @@@7(  @@:@@ (@1*,'/.@..@@@.@.@#**%,&,ST@@@Ш@г-*attributes,/,ST,0,ST@@5(*@@8@@ (-@4*%,D21@11@@@1@1@#--&,C-T>TL@%@@Ш@г0(Location,N-T>TN,O-T>TV@7,R-T>TW,S-T>TX@@@?(N@@B@@ (Q@<@@A@&,i,h&&@&&@@@&@&*T,s&&@&&@@@&@&@+&&,rIYY,sIYY@@;@@.Ptype_abstract\@@,|JY!Y#,}JY!Y3@@,@-Ptype_variant],&@@@ @@@ @@,KY4Y6,KY4Ye@@,@,Ptype_record^,&@@@ @@@ @@,LYfYh,LYfY@*; Invariant: non-empty list ,LYfY,LYfY@@@@@@@,@*Ptype_open_@@,MYY&@@,@@@A@@@@@&@@@&@#FF,JY!Y%D@C@@@G@#CC,KY4Y8,KY4YE@7@гE$list,KY4YaA@гI7constructor_declaration,KY4YI,KY4Y`@@Q(Ӱ@@@V(԰L@@@@N@#JJ,LYfYj,LYfYv@0@гL$list,LYfYH@гP1label_declaration,LYfYz,LYfY@@X(@@@](S@@@@U*-SR@RR@@@R@R@#NN-MYY'B@L@@@O@@A@'E@+'C'C- OYY- OYY@@;@@(pld_name`@@+#loc,@@@ @@@ -QYY-QYY@@-7@+pld_mutablea@@+,mutable_flag@@@ -+RYZ-,RYZ@@-D@(pld_typeb@@(@@@ -7SZZ!-8SZZ5@@-P@'pld_locc@@+!t@@@ -ETZ6Z;-FTZ6ZO@@-^@.pld_attributesd@@(@@@ -QUZPZU-RUZPZp@+D9 [l : T [\@id1] [\@id2]] -_UZPZr-`UZPZ@@@@@@@-x@@@A@@@@@''@@'@#TTI-gQYY@H@@Ш@гWX-oQYY-pQYY@гZ&string-xQYY-yQYY@@b)s@@@h)t @@k@@ )w@a@#]]W-RYZ @V@@Ш@г`a-RYZ-RYZ@@g)@@j@@ )@e@#aa\-SZZ)@[@@Ш@гd)core_type-SZZ+-SZZ4@@l)@@o@@ )@k@#gg`-TZ6ZB@_@@Ш@гj(Location-TZ6ZD-TZ6ZL@q-TZ6ZM-TZ6ZN@@@y)@@|@@ )@v@#rrm-UZPZc@^@@Ш@гu*attributes-UZPZe-UZPZo@@})°@@@@ )@|+-ܐzy@yy@@@y@y@@A@( +-琠( ( @( ( @@@( @( @+((-b\Z\^-b\Z\u@@;@@(pcd_namee@@,u#loc-@@@ @@@ -d\~\-d\~\@@.@(pcd_varsf@@-,#loc-@@@ @@@ @@@ .e\\.e\\@@.)@(pcd_argsg@@(6@@@ .f\\.f\\@@.5@'pcd_resh@@-)@@@ @@@ .-g\\..g\\@@.F@'pcd_loci@@,!t@@@ .;h\].<h\]@@.T@.pcd_attributesj@@)@@@ .Gi]].Hi]]9@,:< [C of ... [\@id1] [\@id2]] .Ui]];.Vi]]\@@@@@@@.n@@@A@@@@@(x@@@(u@#ood.]d\~\@c@@Ш@гrs.ed\~\.fd\~\@гu&string.nd\~\.od\~\@@}*i@@@*j @@@@ *m@|@#xxh.xe\\@g@@Ш@г{$list.e\\.e\\@г.e\\.e\\@г&string.e\\.e\\@@*@@@* @@@*@@@@ *@@#.f\\@@@Ш@г5constructor_arguments.f\\.f\\@@*@@@@ *@@#.g\\@@@Ш@г&option.g\\.g\\@г)core_type.g\\.g\\@@*@@@* @@@@ *@@#.h\] @@@Ш@г(Location.h\] .h\]@.h\].h\]@@@*ְ@@@@ *@@#.i]],@@@Ш@г*attributes.i]]..i]]8@@*@@@@ !*@,/@@@@@@@A@)@+))/l]d]h/l]d]}@@;@@+Pcstr_tuplek.*@@@ &@@@ (@@/m]]/m]]@@/.@,Pcstr_recordl.)_@@@ )@@@ +@@/(n]])?@-  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 [...]]. /5o]]/6{`n`p@@@@@@@/N@@@A@@@@@)P@@@)M@#44/=m]]/>m]]@(@г6$list/Gm]]2@г:)core_type/Om]]/Pm]]@@B+J@@@G+K=@@@@?@#;;/Wn]]/Xn]]@"@г=$list/an]])x@гA1label_declaration/in]]/jn]]@@I+d@@@N+e)@@@@F-^/}ED@DD@@@D@D@@A@)@+))/|}`r`v/}}`r`@@;@@+ptyext_pathm@@. #loc#!t@@@ ,@@@ ./``/``@@/@-ptyext_paramsn@@/@+ @@@ 1@@.1(variance@@@ 2@.8+injectivity@@@ 3@@ 4@@ 5@@@ 7/``/``@@/@3ptyext_constructorso@@/B)@@@ :@@@ </``/`a&@@/@.ptyext_privatep@@.W,private_flag@@@ ?/a'a,/a'aI@@/@*ptyext_locq@@.4!t@@@ B/aJaO/aJaf@@/@1ptyext_attributesr@@+@@@ E/agal/aga@-㐠9 ... [\@\@id1] [\@\@id2] /aga/aga@@@@@@@0@@@A@@@@@**@@*@#u0``@t@@Ш@г0``0``@г)Longident0``0``@0``0``@@@,@@@, @@@@ /,@@#p0(``@o@@Ш@г$list01``02``@В@г)core_type0>``0?``@@,9@@@В@г0L``0M``@@,G@@@г0V``0W``@@,Q@@@,R@@@,S0[``@@@,U0]``,@@@@ 8,Y@@#0d`a @@@Ш@г$list0m`a!0n`a%@г5extension_constructor0v`a 0w`a @@,q@@@,r @@@@ =,u@@#0a'a:@@@Ш@г0a'a<0a'aH@@,@@@@ @,@@#0aJaY@@@Ш@г(Location0aJa[0aJac@0aJad0aJae@@@,@@@@ C,@@#0aga}@@@Ш@г *attributes0aga0aga@@,@@@@ F,@ɠ.0Ȑ@@@@@@@A@*Ӡ.0Ӑ**@**@@@*@*@+*Π*ΰ0bb0bb4@@;@@)pext_names@@/a#loc0@@@ K@@@ M0b=bB0b=bX@@0@)pext_kindt@@*@@@ P0bYb^0bYb@@1 @(pext_locu@@/O!t@@@ S0bb1bb@@1@/pext_attributesv@@,@@@ V1 bb1 bb@.< [C of ... [\@id1] [\@id2]] 1bb1bb@@@@@@@12@@@A@@@@@+@@@+@#GG<1!b=bK@;@@Ш@гJK1)b=bT1*b=bW@гM&string12b=bM13b=bS@@U--@@@[-. @@^@@ N-1@T@#PPK1<bYbg@J@@Ш@гS:extension_constructor_kind1EbYbi1FbYb@@[-@@@^@@ Q-C@Z@#VVO1Nbb@N@@Ш@гY(Location1Ybb1Zbb@`1]bb1^bb@@@h-Y@@k@@ T-\@e@#aa\1gbb@M@@Ш@гd*attributes1pbb1qbb@@l-k@@o@@ W-n@k/f1ih@hh@@@h@h@@A@+z@++x+x1bb1bb@@;@@2ptyexn_constructorw@@+@@@ \1cc1cc3@@1@*ptyexn_locx@@/!t@@@ _1c4c81c4cP@@1@1ptyexn_attributesy@@-;@@@ b1cQcU1cQct@/; [... [\@\@id1] [\@\@id2]] 1cQcv1cQc@@@@@@@1@@@A@@@@@++@@+@#5501cc@/@@Ш@г85extension_constructor1cc1cc2@@@-Ű@@C@@ ]-@?@#;;41c4cB@3@@Ш@г>(Location1c4cE1c4cM@E1c4cN1c4cO@@@M-ް@@P@@ `-@J@#FFA1cQcf@2@@Ш@гI*attributes1cQci1cQcs@@Q-@@T@@ c-@P/2 NM@MM@@@M@M@@A@+/2++@++@@@+@+@+++2cc2cc@@;@@)Pext_declz10#loc1@@@ e@@@ g@@@ i,M@@@ j1-@@@ k@@@ m@@2=cc2>cd>@00 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].}} 2Kd?dE2Lgg@@@@@@@2d@+Pext_rebind{0#loc&!t@@@ n@@@ p@@2agg,<@0S F [Pext_rebind(D)] re-export the constructor [D] with the new name [C] 2ngg2ogh@@@@@@@2@@@A@@@@@,M@@@,J@#ZZ2vcc2wcd@+@г\$list2cd2cd@гab2cd 2cd@гd&string2cd2cd @@l.@@@r. @@@w.@@гi5constructor_arguments2cd2cd+@@q.@@гn&option2cd8j@гr)core_type2cd.2cd7@@z.@@@.u@@@@w02Ðut@tt@@@t@t@#pp2gg2gg@T@гrs2gg,@гt)Longident2gg2gg@{2gg2gg@@@.հ@@@.ְ ,@@@@~02}|@||@@@|@|@@A@,@+,à,ð2hQhU2hQh_@@;@@)pcty_desc|@@,@@@ q2hhhm2hhh@@3@(pcty_loc}@@1X!t@@@ t3hh3 hh@@3!@/pcty_attributes~@@.@@@ w3hh3hh@17 [... [\@id1] [\@id2]] 3"hh3#hh@@@@@@@3;@@@A@@@@@,,@@,@#5503*hhhv@/@@Ш@г8/class_type_desc33hhhx34hhh@@@/.@@C@@ r/1@?@#;;43<hh@3@@Ш@г>(Location3Ghh3Hhh@E3Khh3Lhh@@@M/G@@P@@ u/J@J@#FFA3Uhh@2@@Ш@гI*attributes3^hh3_hh@@Q/Y@@T@@ x/\@P1T3sNM@MM@@@M@M@@A@-B33~-@-?@-?-?@@@-?@-?33-=-<@-<-<@@@-<@-<@+-:-:3hh3hh@@;@@+Pcty_constr2#loc'!t@@@ z@@@ |3"/#@@@ }@@@ @@3ii3ii4@1 ) - [c] - [['a1, ..., 'an] c] 3i5i;3iEii@@@@@@@3@.Pcty_signature-o@@@ @@3ijil3iji@12 [object ... end] 3iji3iji@@@@@@@3@*Pcty_arrow2c)arg_label@@@ /b@@@ -@@@ @@3ii3ii@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]}. 3ii3kJkU@@@@@@@4@.Pcty_extension/@@@ @@4kVkX4 kVku@1' [%id] 4kVkw4kVk@@@@@@@4/@)Pcty_open,d@@@ -@@@ @@4)kk-@24 [let open M in CT] 46kk47kk@@@@@@@4O@@@A@@@@@-@@@-@#4>ii4?ii@@г4Gii 4Hii#@г)Longident4Rii4Sii@4Vii4Wii@@@0R@@@0S @@г$list4bii0@г)core_type4jii&4kii/@@0e@@@0f@@@@Ơ2_4~@@@@@@#4}ijin4~iji|@@г/class_signature4iji@@0@@@@Š2z4@@@@@@#4ii4ii@@г4ii4ii@@0@@гà)core_type4ii4ii@@0@@гȠ*class_type4ii@@0@@@@̠24ǐ@@@@@@#ŠŰ4kVkZ4kVkh@@гǠ)extension4kVkl@@0ʰ@@@@ˠ24␠@@@@@@#Ġİ4kk4kk@@гƠ0open_description4kk4kk@@0@@гˠ*class_type4kk.@@0.@@@@Ϡ25@@@@@@@A@.@+..5kk5kk@@;@@*pcsig_self@@0@@@ 5kk5kl@@5,@,pcsig_fields@@4.@@@ @@@ 5$ll 5%ll0@@5=@@@A@@@@@..@@.@#5,kk@@@Ш@г!)core_type55kk56kl@@)10@@,@@ 13@(@#$$5>ll@@@Ш@г'$list5Gll+5Hll/@г,0class_type_field5Pll5Qll*@@41K@@@91L @@<@@ 1O@3@@A@.3G5f..@..@@@.@.@+..5emm5fmm,@@;@@)pctf_desc@@.@@@ 5rm5m:5sm5m[@@5@(pctf_loc@@3!t@@@ 5m\ma5m\mv@@5@/pctf_attributes@@1@@@ 5mwm|5mwm@3; [... [\@\@id1] [\@\@id2]] 5mwm5mwm@@@@@@@5@@@A@@@@@//@@@/,@#5505m5mC@/@@Ш@г85class_type_field_desc5m5mE5m5mZ@@@1@@C@@ 1@?@#;;45m\mi@3@@Ш@г>(Location5m\mk5m\ms@E5m\mt5m\mu@@@M1@@P@@ 1@J@#FFA5mwm@2@@Ш@гI*attributes5mwm5mwm@@Q1Ѱ@@T@@ 1@P35될NM@MM@@@M@M@@A@/x@+/v/v5mm5mm@@;@@,Pctf_inherit/@@@ @@5mm5mm@3쐠. [inherit CT] 6mm6mn@@@@@@@6 @(Pctf_val@4#loc4%label@@@ @@@ @4,mutable_flag@@@ @4,virtual_flag@@@ @1@@@ @@ @@64nn65nnW@4', [val x: T] 6BnXn^6CnXno@@@@@@@6[@+Pctf_method@4#loc4%label@@@ @@@ @4,private_flag@@@ @4,virtual_flag@@@ @1@@@ @@ @@6onpnr6pnpn@4b a [method x: T] Note: [T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}. 6}nn6~oo%@@@@@@@6@/Pctf_constraint@2 @@@ @2@@@ @@ @@6o&o(6o&oT@46 [constraint T1 = T2] 6o&oV6o&oq@@@@@@@6@.Pctf_attribute3@@@ @@6orot6oro@4. [[\@\@\@id]] 6oro6oro@@@@@@@6@.Pctf_extension2z@@@ @@6oo0V@4* [[%%id]] 6oo6oo@@@@@@@6@@@A@@@@@0g@@@0d@#6mm6mm@@г*class_type6mm@@2@@@@46@@@@@@#6nn6nn@@В@г7 nn)7 nn,@г7nn#7nn(@@3 @@@3 @@@г7nn/7nn;@@3@@@г7'nn>7(nnJ@@3"@@@г)core_type72nnM73nnV@@3-@@@%3.$@@@@5'7F@@@@@@#7Enpnt7Fnpn@@В@г7Rnpn7Snpn@г7Znpn7[npn@@3U@@@3V @@@г7enpn7fnpn@@ 3`@@@г7onpn7pnpn@@3j@@@г )core_type7znpn7{npn@@3u@@@23v$@@@@5o7 @  @@@ @ @#  7o&o*7o&o9@@В@г )core_type7o&o>7o&oG@@3@@@г)core_type7o&oJ7o&oS@@3@@@#3@@@@57@@@@@@#7orov7oro@@г)attribute7oro@@3@@@@57Ր@@@@@@#7oo7oo@@г)extension7oo1g@@3ذ1h@@@@57𐠠@@@@@@@A@1u@+1s1s7oo7oo@А!a@ 37oo7oo@@BA@; @A(pci_virt@@6,virtual_flag@@@ 8 oo8 op@@8#@*pci_params@@7@3@@@ @@6(variance@@@ @6+injectivity@@@ @@ @@ @@@ 81pp82ppN@@8J@(pci_name@@6#loc8@@@ @@@ 8CpOpT8DpOpi@@8\ @(pci_expr@@VD@ 8Mpjpo8Npjp|@@8f @'pci_loc@@6!t@@@ °8[p}p8\p}p@@8t @.pci_attributes@@3@@@ Ű8gpp8hpp@6Z; [... [\@\@id1] [\@\@id2]] 8upp8vpp@@@@@@@8 @@@A@Y@@@@@11@@1@#{{u8op@t@@Ш@г~8op8op@@4@@@@ 4@@#_8pp @^@@Ш@г$list8ppI8ppM@В@г)core_type8pp#8pp,@@4@@@В@г8pp08pp8@@4@@@г8pp;8ppF@@4@@@4@@@48ppG@@@48pp",@@@@ 4@@#8pOp\@@@Ш@г8pOpe8pOph@г&string8pOp^8pOpd@@4ذ@@@4ٰ @@@@ 4@@#8pjpw@@@Ш@А!a48pjpy8pjp{@@@@ 4@@#8p}p@@@Ш@г(Location9p}p9p}p@9p}p9p}p@@@5@@@@ 5@@#9pp@@@Ш@г*attributes9pp9pp@@5@@@@ 5@79-@@@@@@@A@279822@22@@@2@2@+2297qq98qq@@;@@5A2Ġ3@@@ @@@ @@@@2@@@2@@Aг +class_infos9Kqq2@г*class_type9Sqq9Tqq@@5N@@@5O2@@2@+229[qq9\qq@@;@@6 A23>@@@ @@@ @@@@2@@@2@@Aг +class_infos9oqr2@г*class_type9wqq9xqr@@5r@@@5s2@@2@+2ʠ2ʰ9rCrG9rCrQ@@;@@(pcl_desc@@2@@@ ΰ9rZr_9rZry@@9 @'pcl_loc@@7!t@@@ Ѱ9rzr9rzr@@9@.pcl_attributes@@56@@@ ԰9rr9rr@77 [... [\@id1] [\@id2]] 9rr9rr@@@@@@@9@@@A@@@@@32@@2@#5509rZrg@/@@Ш@г8/class_expr_desc9rZri9rZrx@@@5@@C@@ 5@?@#;;49rzr@3@@Ш@г>(Location9rzr9rzr@E9rzr9rzr@@@M5ٰ@@P@@ 5@J@#FFA9rr@2@@Ш@гI*attributes9rr9rr@@Q5@@T@@ 5@P7:NM@MM@@@M@M@@A@3I::3G3F@3F3F@@@3F@3F@+3D3D: rr: rr@@;@@*Pcl_constr8#loc.!t@@@ @@@ ٠95@@@ @@@ @@:0 rr:1 rs"@8#= [c] and [['a1, ..., 'an] c] :> s#s):? s#sK@@@@@@@:W@-Pcl_structure3y@@@ @@:LsLsN:MsLsp@8?2 [object ... end] :ZsLsr:[sLs@@@@@@@:s@'Pcl_fun8)arg_label@@@ ޠ9Ϡ5l@@@ @@@ 5@@@ 3@@@ @@:}ss:~ss@8p  [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]. :ss:vsv}@@@@@@@:@)Pcl_apply3@@@ :@9()arg_label@@@ 堠@5@@@ @@ @@@ @@:v~v:v~v@8 [Pcl_apply(CE, [(l1,E1) ; ... ; (ln,En)])] represents [CE ~l1:E1 ... ~ln:En]. [li] can be empty (non labeled argument) or start with [?] (optional argument). Invariant: [n > 0] :vv:%ww@@@@@@@:@'Pcl_let9L(rec_flag@@@ :N2F@@@ @@@ 4%@@@ @@:&ww:&ww@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]}. :'ww:,y<yF@@@@@@@;@.Pcl_constraint4A@@@ 4@@@ @@:-yGyI:-yGyt@8- [(CE : CT)] ; -yGyv; -yGy@@@@@@@;"@-Pcl_extension6@@@ @@;.yy;.yy@9 ) [[%id]] ;%.yy;&.yy@@@@@@@;>@(Pcl_open3s@@@ 4@@@ @@;8/yy4j@9*4 [let open M in CE] ;E/yy;F/yz@@@@@@@;^@@@A@@@@@4{@@@4x@#66;M rr;N rr@@г89;V rs;W rs@г;)Longident;a rs;b rs @B;e rs ;f rs @@@J7a@@@P7b @@гE$list;q rsA@гI)core_type;y rs;z rs@@Q7t@@@V7uL@@@@N9n;LK@KK@@@K@K@#GG;sLsP;sLs]@2@гI/class_structure;sLsaJ@@P7K@@@@M9;KJ@JJ@@@J@J@#FF;ss;ss@@гHI;ss;ss@@O7@@гK&option;ss;ss@гP*expression;ss;ss@@X7@@@]7 @@гU'pattern;ss;ss@@]7ɰ@@гZ*class_expr;ss[@@a7Ұ\@@@@^9;ꐠ\[@[[@@@[@[@#WW;v~v;v~v@-@гY*class_expr;v~v;v~v@@a7@@г^$list;v~vO@В@гbc<v~v< v~v@@i8@@@гe*expression<v~v<v~v@@m8@@@y8@@@~8<v~vj@@@@l: <)ji@ii@@@i@i@#ee<(&ww<)&ww@@@гgh<1&ww<2&ww@@n8,@@гj$list<;&ww<<&ww@гo-value_binding6=@6=6=@@@6=@6=@+6;6;=$<{B{F=%<{B{Q@@;@@(pcf_desc@@6@@@@ =1>{Z{_=2>{Z{z@@=J@'pcf_loc@@;!t@@@ =??{{{=@?{{{@@=X@.pcf_attributes@@8@@@=K@{{=L@{{@;>; [... [\@\@id1] [\@\@id2]] =Y@{{=Z@{{@@@@@@@=r@@@A@@@@@6q@@@6n@#550=a>{Z{g@/@@Ш@г80class_field_desc=j>{Z{i=k>{Z{y@@@9e@@C@@ 9h@?@#;;4=s?{{{@3@@Ш@г>(Location=~?{{{=?{{{@E=?{{{=?{{{@@@M9~@@P@@9@J@#FFA=@{{@2@@Ш@гI*attributes=@{{=@{{@@Q9@@T@@9@P;=NM@MM@@@M@M@@A@6@+66=C{{=C{{@@;@@+Pcf_inherit<:-override_flag@@@7 @@@=$=R~~@@@@@@@=@'Pcf_val@S~~>S~~@;  [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)]} >T~>a@@@@@@@>)@*Pcf_method@<#loc<%label@@@@@@@<,private_flag@@@@7=@@@@@@@>6b>7b6@<) - [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]}) >Dc7=>Eg@@@@@@@>]@.Pcf_constraint@9@@@@9@@@@@@@>\h>]hI@jhK>khf@@@@@@@> @/Pcf_initializer9r@@@@@>xigi>yig@ig>ig@@@@@@@>!@-Pcf_attribute:@@@@@>j>j@<. [[\@\@\@id]] >j>j@@@@@@@>"@-Pcf_extension:]@@@@@>k7@<* [[%%id]] >k>k@@@@@@@>#@@@A@@@@@7@@@7@#>D{{>D{|@@г>D{| >D{|@@:ɰ@@г*class_expr>D{|>D{|#@@!:Ӱ@@г&option>D{|1@г"#>D{|->D{|0@г%&string>D{|&>D{|,@@-:@@@3: @@@8:(@@@@*<?('@''@@@'@'@###?S~~?S~~@@В@г%&?S~~?S~~@г()?S~~?S~~@@/;@@@5; @@@г+,?&S~~?'S~~@@2;!@@@г.0class_field_kind?1S~~?2S~~@@6;,@@@O;-@@@@4=&?E21@11@@@1@1@#--?Db?Eb@@В@г/0?Qb?Rb@г23?Yb ?Zb@@9;T@@@?;U @@@г56?db?eb"@@<;_@@@г80class_field_kind?ob%?pb5@@@;j@@@Y;k@@@@>=d?<;@;;@@@;@;@#77?h ?h.@@В@г9)core_type?h3?h<@@A;@@@г>)core_type?h??hH@@F;@@@Q;@@@@D=?BA@AA@@@A@A@#==?igk?igz@(@г?*expression?ig~@@@F;A@@@@C=?ʐA@@@@@@@@@@@#<<?j?j@'@г>)attribute?j?@@E;Ͱ@@@@@B=?吠@?@??@@@?@?@#;;?k?k@'@г=)extension?k8@@D;8@@@@A=@@?@??@@@?@?@@A@9@+99?m @m@@;@@+Cfk_virtual;@@@@@@n@n9@@@'$@,Cfk_concrete>-override_flag@@@;@@@ @@@"o:<9&@@@:%@@@A@@@@@9)@@@9&@#""@)n!@*n,@@г$)core_type@3n0%@@+<-&@@@@(@#$$@9o:>@:o:J@@г&'@Bo:N@Co:[@@-<=@@г)*expression@Lo:^9P@@0!t@@@'@y$)@y$>@@@'@/pmty_attributes@@<-@@@*@z?D@z?`@>7 [... [\@id1] [\@id2]] @z?b@z?~@@@@@@@@(@@@A@@@@@99@@9}@#550@x@/@@Ш@г80module_type_desc@x@x"@@@<@@C@@%<@?@#;;4@y$1@3@@Ш@г>(Location@y$3@y$;@E@y$<@y$=@@@M<а@@P@@(<@J@#FFA@z?S@2@@Ш@гI*attributes@z?U@z?_@@Q<@@T@@+<@P>@NM@MM@@@M@M@@A@9堰AA99@99@@@9@9⠰AA99@99@@@9@9@+9ݠ9ݰA}A}@@;@@*Pmty_ident?#loc5!t@@@-@@@/@@A(~A)~@? [Pmty_ident(S)] represents [S] A6~A7~@@@@@@@AO)@.Pmty_signature:@@@0@@ADAE@?7/ [sig ... end] ARAS@@@@@@@Ak*@,Pmty_functor:$@@@1:U@@@2@@AeAfO@?X; [functor(X : MT1) -> MT2] AsPVAtPv@@@@@@@A+@)Pmty_with:q@@@3A9I@@@4@@@6@@AwyAw@?~/ [MT with ...] AwAw@@@@@@@A,@+Pmty_typeof9^@@@7@@AA@?5 [module type of ME] AA@@@@@@@A-@.Pmty_extension=p@@@8@@AA@?) [[%id]] AA+@@@@@@@A.@*Pmty_alias@a#loc6B!t@@@9@@@;@@A,.:@?ِ. [(module M)] A,OA,b@@@@@@@B /@@@A@@@@@:@@@:@#A~A~@@г堐B~@г砡)LongidentB~B~@B~B~@@@>@@@> @@@@񠰠@ B(@@@@@@#B'B(@@г점)signatureB1@@>+@@@@𠰠@$BC@@@@@@#BB BC,@@г렐1functor_parameterBL0BMA@@>G@@г+module_typeBVD@@>P@@@@@IBh@@@@@@#Bgw{Bhw@@г+module_typeBqwBrw@@>l@@г$listB{w@г/with_constraintBwBw@@>~@@@>@@@@@xB@@@@@@#BB@@г+module_exprB@@>@@@@@B@@@@@@#BB@@г)extensionB@@>@@@@@B͐@@@@@@#B,0B,:@@гB,J;@г)LongidentB,>B,G@B,HB,I@@@>߰@@@ > ;@@@@@B@@@@@@@A@;@+;;BdhBdy@@;@@$Unit@@C|~C|@@& [()] C|C|@@@@@@@C(0@%NamedA#locBB@@@<@@@>@@@@<@@@A@@C-;@A [Named(name, MT)] represents: - [(X : MT)] when [name] is [Some X], - [(_ : MT)] when [name] is [None] C:C;J@@@@@@@CS1@@@A@@@@@;@@@;@#CCCB|A@2@@@DA5CTBA@AA@@@A@A@#==CSCT@@г?@C\C]@гB&optionCeCf@гG&stringCnCo@@O?i@@@T?j @@@Z?k@@гL+module_typeCz<;@@S?t<<@@@@PAmCON@NN@@@N@N@@A@@@@K@@D D @A E - [val x: T] - [external x: T = "s1" ... "sn"] DDVa@@@@@@@D34@)Psig_typeB(rec_flag@@@LC>@@@M@@@O@@D3bdD4b@B& ' [type t1 = ... and ... and tn = ...] DADB@@@@@@@DZ5@.Psig_typesubstC͠>@@@P@@@R@@DTDU@BG ) [type t1 := ... and ... and tn := ...] DbDc'@@@@@@@D{6@+Psig_typext>@@@S@@Dp(*Dq(I@Bc2 [type t1 += ...] D~(KD(b@@@@@@@D7@.Psig_exception>@@@T@@DceDc@B4 [exception C of T] DcDc@@@@@@@D8@+Psig_module=E@@@U@@DD@B $ [module X = M] and [module X : MT] DD@@@@@@@D9@-Psig_modsubst=K@@@V@@DD@B1 [module X := M] DD4@@@@@@@D:@.Psig_recmoduleÐD^=@@@W@@@Y@@D57D5b@Bؐ , [module rec X1 : MT1 and ... and Xn : MTn] DciDc@@@@@@@E ;@,Psig_modtypeĐ=r@@@Z@@EE@B * [module type S = MT] and [module type S] EE@@@@@@@E(<@1Psig_modtypesubstŐ=@@@[@@EE-@C: [module type S := ...] E+.4E,.S@@@@@@@ED=@)Psig_openƐ=y@@@\@@E9TVE:Tu@C,* [open X] EGTwEHT@@@@@@@E`>@,Psig_includeǐ=N@@@]@@EUEV@CH. [include MT] EcEd@@@@@@@E|?@*Psig_classȐD>@@@^@@@`@@EvEw@Ci ' [class c1 : ... and ... and cn : ...] EE@@@@@@@E@@/Psig_class_typeɐE>@@@a@@@c@@E "E R@C . [class type ct1 = ... and ... and ctn = ...] ESYES@@@@@@@EA@.Psig_attributeʐB @@@d@@EE@C. [[\@\@\@id]] EE@@@@@@@EB@.Psig_extensionːA|@@@eAd@@@f@@E>v@CƐ* [[%%id]] EE@@@@@@@EC@@@A@@@@@>@@@>@#EE@@г栐1value_descriptionE@@A@@@@꠰CF@@@@@@#FbfFbo@@г堐F bsFb{@@B@@г蠐$listFb@г점0type_declarationFb~F b@@B@@@B@@@@񠰠DF3@@@@@@#F2F3@@г점$listF<@г0type_declarationFDFE@@B?@@@B@@@@@D9FX@@@@@@#FW(,FX(7@@г.type_extensionFa(;@@B[@@@@DTFs@@@@@@#FrcgFscu@@г.type_exceptionF|cy@@Bv@@@@󠰠DoF@@@@@@#FF@@г2module_declarationF@@B@@@@򠰠DF@@@@@@#FF@@г3module_substitutionF @@B@@@@񠰠DFĐ@@@@@@#F59F5G@@г점$listF5^@г2module_declarationF5KF5]@@Bа@@@BѰ@@@@DF鐠@@@@@@#FF@@г7module_type_declarationF@@B@@@@DG@@@@@@#GG@@г7module_type_declarationG @@C@@@@󠰠EG@@@@@@#GTXGTa@@г0open_descriptionG(Te@@C"@@@@򠰠EG:@@@@@@#G9G:@@г3include_descriptionGC@@C=@@@@񠰠E6GU@@@@@@#GTGU@@г점$listG^@г1class_descriptionGfGg@@Ca@@@Cb@@@@E[Gz@@@@@@#Gy $Gz 3@@г$listG N@г6class_type_declarationG 7G M@@C@@@C@@@@EG@@@@@@#GG@@г)attributeG@@C@@@@EG@@@@@@#GG@@г)extensionGG@@C@@г*attributesG@o@@Cǰ@p@@@@EGߐ@@@@@@@A@@}@+@{@{GG@@;@@(pmd_name@@Fm#locGQG@@@g@@@i@@@kG %G A@@HD@(pmd_type@@@@@@nHBGHB]@@HE@.pmd_attributes@@C@@@qH^cH^~@F; [... [\@\@id1] [\@\@id2]] H^H^@@@@@@@H5F@'pmd_loc@@Fz!t@@@tH*H+@@HCG@@@A@@@@@@@@@@@#LL<H2 -@;@@Ш@гOPH: =H; @@гR&optionHC 6HD <@гW&stringHL /HM 5@@_DG@@@dDH @@@jDI@@m@@lDL@^@#ZZUHWBO@T@@Ш@г]+module_typeH`BQHaB\@@eD[@@h@@oD^@d@#``[Hi^q@L@@Ш@гc*attributesHr^sHs^}@@kDm@@n@@rDp@jFhHhg@gg@@@g@g@#cc\H@[@@Ш@гf(LocationHH@mHH@@@uD@@x@@uD@r@@A@A6FHA4A3@A3A3@@@A3@A3@+A1A1HH@@;@@(pms_name@@G9#locH@@@z@@@|H!&H!;@@HH@,pms_manifest@@GK#loc=,!t@@@@@@H<AH<_@@HI@.pms_attributes@@Dm@@@H`eH`@FА; [... [\@\@id1] [\@\@id2]] H`H`@@@@@@@IJ@'pms_loc@@GI!t@@@HH@@IK@@@A@@@@@AA~@@Ap@#OODI!.@C@@Ш@гRSI !7I !:@гU&stringI!0I!6@@]E @@@cE @@f@@}E@\@#XXKI<M@J@@Ш@г[\I$<[I%<^@г^)LongidentI/<OI0<X@eI3<YI4<Z@@@mE/@@@sE0 @@v@@E3@j@#ffaI>`s@R@@Ш@гi*attributesIG`uIH`@@qEB@@t@@EE@pG=I\nm@mm@@@m@m@#iibI[@a@@Ш@гl(LocationIfIg@sIjIk@@@{Ef@@~@@Ei@x@@A@AGaIAA@AA@@@A@A@+AAII@@;@@)pmtd_name@@H#locI]@@@@@@I(-I(C@@IL@)pmtd_type@@HB@@@@@@IDIIDg@@IM@/pmtd_attributes@@E?@@@IhmIh@G; [... [\@\@id1] [\@\@id2]] IhIh@@@@@@@IN@(pmtd_loc@@H!t@@@II@@IO@@@A@@@@@B=B:@@B,@#LLAI(6@@@@Ш@гOPI(?I(B@гR&stringI(8I(>@@ZE߰@@@`E @@c@@E@Y@#UUKIDR@J@@Ш@гX&optionID`IDf@г]+module_typeJDTJD_@@eE@@@jE @@m@@E@d@#``[J h|@L@@Ш@гc*attributesJh~Jh@@kF@@n@@F@jH J(hg@gg@@@g@g@#cc\J'@[@@Ш@гf(LocationJ2J3@mJ6J7@@@uF2@@x@@F5@r@@A@BH-JLBB@BB@@@B@B@+BBJKJL@А!a@FNJVJW@@\@;@A*popen_expr@@D@JbJc@@J{P@.popen_override@@H-override_flag@@@JoJp@@JQ@)popen_loc@@H!t@@@J}J~@@JR@0popen_attributes@@F@@@JJ @@JS@@@A@Y@@@@@BB@@B@#441J@0@@Ш@А!a:FJJ@@?@@F@=@#993J@2@@Ш@г<=JJ@@CF@@F@@F@A@#==6J@5@@Ш@г@(LocationJJ@GJJ@@@OF@@R@@F@L@#HHCJ@B@@Ш@гK*attributesJJ@@SFа@@V@@F@R@@A@C.HJꐠC,C+@C+C+@@@C+@C+@+C)C)JJ@@;@@GACMIx#loc?Y!t@@@@@@@@@@@@@C5C2@@C$@@Aг*open_infosKC;@гK K @г)LongidentKK@ KK@@@(G@@@.G @@@3G CV@@CXIK1CVCU@CUCU@@@CU@CU@+CSCSK0(,K1(<@@;@@GACB@@@@@@@@@@CWCT@@CF@@Aг *open_infosKD(KC]@г+module_exprKL(?KM(J@@GG@@@GHCh@@CjIAK`ChCg@CgCg@@@Cg@Cg@+CeCeK_K`@А!a@GbKjKk@@p@;@A)pincl_mod@@D@KvKw@@KT@)pincl_loc@@I!t@@@KK@@KU@0pincl_attributes@@G @@@KK<@@KV@@@A@Y@@@@@C@@@C@#''$K@#@@Ш@А!a-GKK@@2@@G@0@#,,%K @$@@Ш@г/(LocationKK@6KK@@@>G@@A@@G@;@#772K/@1@@Ш@г:*attributesK1K;@@BGư@@E@@G@A@@A@C@+C͠CͰKDHKD[@@;@@HACD@@@@@@@@@@CC@@C@@Aг -include_infosKDjC@г+module_typeKD^KDi@@G@@@GC@@C䠰ILCC@CC@@@C@C@+CߠC߰LL@@;@@HADC@@@@@@@@@@CC@@C@@Aг -include_infosLC@г+module_exprLL @@H@@@HC@@CJL3CC@CC@@@C@C@+CCL26:L36I@@;@@*Pwith_typeߐJ#loc@!t@@@@@@ɠF@@@@@LNLNLOL@JA [with type X.t = ...] Note: the last component of the longident must match the name of the type_declaration. L\L]@@@@@@@LuW@,Pwith_moduleJ#loc@!t@@@@@@͠J#loc@!t@@@@@@@@LLI@Jr7 [with module X.Y = Z] LJPLJl@@@@@@@LX@-Pwith_modtypeᐠK#loc@!t@@@@@@ӠE@@@@@LmoLm@J< [with module type X.Y = Z] LL@@@@@@@LY@2Pwith_modtypesubst␠KF#locA'!t@@@@@@נE@@@@@LL@JĐ # [with module type X.Y := sig end] LL.@@@@@@@LZ@/Pwith_typesubst㐠Ko#locAP!t@@@@@@۠G^@@@@@L/1L/h@J퐠 5 [with type X.t := ..., same format as [Pwith_type]] MioM i@@@@@@@M![@.Pwith_modsubst䐠K#locAy!t@@@@@@ߠK#locA!t@@@@@@@@M+D@K8 [with module X.Y := Z] M8M9@@@@@@@MQ\@@@A@@@@@D@@@D@#M@LPMALZ@@г MILjMJLm@г )LongidentMTL^MULg@MXLhMYLi@@@IT@@@ IU @@г0type_declarationMdLp@@I^@@@@KWMv@@@@@@#MuMv$@@гM~4M7@г)LongidentM(M1@M2M3@@@&I@@@,I @@г!"MF@г#)LongidentM:MC@*MDME@@@2I@@@8I +@@@@-KM+*@**@@@*@*@#&&MmqMm~@@г()MmMm@г+)LongidentMmMm@2MmMm@@@:Iΰ@@@@Iϰ @@г5+module_typeMm6@@<Iذ7@@@@9KM𐠠76@66@@@6@6@#22MM@@г45MM@г7)LongidentNN@>NN@@@FJ@@@LJ @@гA+module_typeNB@@HJ C@@@@ELN%CB@BB@@@B@B@#>>N$/3N%/B@@г@AN-/RN./U@гC)LongidentN8/FN9/O@JN</PN=/Q@@@RJ8@@@XJ9 @@гM0type_declarationNH/XN@@TJBO@@@@QL;NZON@NN@@@N@N@#JJNYNZ@!@гLMNbNc@гO)LongidentNmNn@VNqNr@@@^Jm@@@dJn @@гYZN|F8@г[)LongidentNN@bNN@@@jJ@@@pJ FJ@@@@eLNdc@cc@@@c@c@@A@FW@+FUFUN =AN =L@@;@@)pmod_desc@@FL@@@N UZN Uv@@N]@(pmod_loc@@M !t@@@Nw|Nw@@N^@/pmod_attributes@@JU@@@NN@L7 [... [\@id1] [\@id2]] NN@@@@@@@N_@@@A@@@@@FF@@Fz@#550N Uc@/@@Ш@г80module_expr_descN UeN Uu@@@J߰@@C@@J@?@#;;4Nw@3@@Ш@г>(LocationNwNw@ENwNw@@@MJ@@P@@J@J@#FFAO@2@@Ш@гI*attributesOO@@QK @@T@@K @PMO$NM@MM@@@M@M@@A@FԠO0O/FF@FF@@@F@F@+FϠFϰO.O/@@;@@*Pmod_ident萠M#locC!t@@@@@@@@OEOF@M8% [X] OSOT@@@@@@@Ol`@.Pmod_structure鐠F@@@@@Oa Ob=@MT2 [struct ... end] Oo?OpV@@@@@@@Oa@,Pmod_functorꐠHA@@@G9@@@@@OWYOW@Mu: [functor(X : MT1) -> ME] OO@@@@@@@Ob@*Pmod_apply될GU@@@GZ@@@@@OO@M, [ME1(ME2)] OO@@@@@@@Oc@/Pmod_apply_unit쐠Gv@@@@@OO@M) [ME1()] OO @@@@@@@Od@/Pmod_constraint퐠G@@@H@@@@@O!#O!Q@MӐ- [(ME : MT)] O!SO!e@@@@@@@Pe@+Pmod_unpackJ@@@@@OfhOf@M+ [(val E)] P fP f@@@@@@@P#f@.Pmod_extensionK@@@@@PG@N ) [[%id]] P%P&@@@@@@@P>g@@@A@@@@@G@@@G@#P-P.@@гP6@г)LongidentP@PA @PD PE @@@ L@@@@LA @@@@N:PY@@@@@@#PX"PY0@@г)structurePb4@@L\@@@@NUPt@@@@@@#PsW[PtWg@@г1functor_parameterP}WkP~W|@@Lx@@г+module_exprPW@@ L@@@@NzP@@@@@@#PP@@г+module_exprPP@@ L@@г+module_exprP @@L @@@@ NP  @  @@@ @ @#PP@@г+module_exprP@@L @@@@ NPِ @@@@@@#P!%P!4@@г+module_exprP!8P!C@@Lݰ@@г +module_typeP!F @@L @@@@NP  @  @@@ @ @#PfjPfu@@г *expressionQfy @@M @@@@NQ  @  @@@ @ @#QQ@@г )extensionQ"H@@MH@@@@ OQ4  @  @@@ @ @@A@H@+H̠H̰Q3Q4@@;@@MAPH@@@@@@@@@@H@@@H@@Aг $listQGH@г.structure_itemQOQP@@MJ@@@MKH@@H@+HHQWQX@@;@@)pstr_desc@@H@@@Qd! Qe!+@@Q}h@(pstr_loc@@O!t@@@Qr",1Qs",F@@Qi@@@A@@@@@H@@@H@#Qz!@@@Ш@г3structure_item_descQ!Q!*@@&M~@@)@@M@%@#!!Q",9@@@Ш@г$(LocationQ",;Q",C@+Q",DQ",E@@@3M@@6@@M@0@@A@I)@+I'I'Q%NRQ%Ne@@;@@)Pstr_evalL@@@MI@@@@@Q&hjQ&h@O% [E] Q&hQ&h@@@@@@@Qj@*Pstr_valuePW(rec_flag@@@QYIQ@@@@@@@@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]}. Q(Q-@@@@@@@Rk@.Pstr_primitiveL@@@@@Q. Q.E@O < - [val x: T] - [external x: T = "s1" ... "sn" ]R /FLR 0]@@@@@@@R#l@)Pstr_typeP(rec_flag@@@ QL@@@ @@@ @@R#1R$1@P & [type t1 = ... and ... and tn = ...] R12R22@@@@@@@RJm@+Pstr_typextLQ@@@ @@R?3R@3@P22 [type t1 += ...] RM3RN3,@@@@@@@Rfn@.Pstr_exceptionLO@@@@@R[4-/R\4-Q@PN 8 - [exception C of T] - [exception C = M.X] Ri5RXRj6q@@@@@@@Ro@+Pstr_moduleI@@@@@Rw7Rx7@Pj1 [module X = ME] R7R7@@@@@@@Rp@.Pstr_recmoduleRI@@@@@@@@R8R8@P , [module rec X1 = ME1 and ... and Xn = MEn] R9R91@@@@@@@Rq@,Pstr_modtypeK%@@@@@R:24R:2]@P6 [module type S = MT] R:2_R:2z@@@@@@@Rr@)Pstr_openJ@@@@@R;{}R;{@PÐ* [open X] R;{R;{@@@@@@@Rs@*Pstr_classRjK@@@@@@@@R<R<@P䐠 ' [class c1 = ... and ... and cn = ...] R=S= @@@@@@@St@/Pstr_class_typeRLk@@@@@@@@S>  S> <@Q . [class type ct1 = ... and ... and ctn = ...] S ?=CS!?=v@@@@@@@S9u@,Pstr_includeK @@@@@S.@wyS/@w@Q!. [include ME] S<@wS=@w@@@@@@@SUv@.Pstr_attributeO@@@@@SJASKA@Q=. [[\@\@\@id]] SXASYA@@@@@@@Sqw@.Pstr_extensionO@@@N@@@@@SkBJ@Q]* [[%%id]] SxBSyB&@@@@@@@Sx@@@A@@@@@J@@@J@#ӠӰS&hlS&hu@@гՠ*expressionS&hyS&h@@O@@гڠ*attributesS&h@@O@@@@ޠQS@@@@@@#נװS'S'@@г٠ڰS'S'@@O@@гܠ$listS'@гࠐ-value_bindingS'S'@@O@@@O@@@@堰QSԐ@@@@@@#ޠްS."S.0@@гࠐ1value_descriptionS.4@@Oװ@@@@䠰QS@@@@@@#ݠݰS1S1@@гߠS1S1@@O@@г⠐$listT1@г栐0type_declarationT 1T 1@@P@@@P@@@@렰QT@@@@@@#T3T3@@г栐.type_extensionT&3@@P @@@@꠰RT8@@@@@@#T74-1T84-?@@г堐.type_exceptionTA4-C@@P;@@@@頰R4TS@@@@@@#TR7TS7@@г䠐.module_bindingT\7@@PV@@@@蠰ROTn@@@@@@#Tm8Tn8@@г㠐$listTw8@г砐.module_bindingT8T8@@Pz@@@P{@@@@젰RtT@@@@@@#T:26T:2B@@г砐7module_type_declarationT:2F@@P@@@@렰RT@@@@@@#T;{T;{@@г栐0open_declarationT;{@@P@@@@꠰RTɐ@@@@@@#T<T<@@г堐$listT<@г預1class_declarationT<T<@@Pհ@@@Pְ@@@@RT@@@@@@#T> T> @@г預$listT> 8@г6class_type_declarationT> !U> 7@@P@@@P@@@@򠰠RU@@@@@@#U@w{U@w@@г3include_declarationU@w@@Q@@@@񠰠SU.@@@@@@#U-AU.A@@г점)attributeU7A@@Q1@@@@𠰠S*UI@@@@@@#UHBUIB@@г렐)extensionURBUSB@@QM@@г*attributesU\B L@@QVL@@@@SOUn@@@@@@@A@L@+LLUmD(,UnD(<@@;@@.Pvc_constraint8locally_abstract_univars@@TT#locUT@@@@@@!@@@#UFW]UFW@@Uy@#typ@@Q@@@&UGUG@@Uz@@@UE?AUH@@U{@,Pvc_coercion&ground@@U Q*@@@)@@@+UIUI@@U|@(coercion@@Q7@@@.UIUI@@U}@@@UIM7@S  - [Pvc_constraint { locally_abstract_univars=[]; typ}] is a simple type constraint on a value binding: [ let x : typ] - More generally, in [Pvc_constraint { locally_abstract_univars; typ}] [locally_abstract_univars] is the list of locally abstract type variables in [ let x: type a ... . typ ] - [Pvc_coercion { ground=None; coercion }] represents [let x :> typ] - [Pvc_coercion { ground=Some g; coercion }] represents [let x : g :> typ] UJUR@@@@@@@U~@@@A@@@@@MH@@@ME@#``UE?CUE?Q@;@#bbRUFWu@Q@@Ш@гe$listUFWUFW@гjkUFW}UFW@гm&stringUFWvUFW|@@uQ@@@{Q @@@Q@@@@$Q@t@#ppkVG@j@@Ш@гs)core_typeV GV G@@{R@@~@@'R@z@@@v@#rrVIVI@F@#ttjVI@i@@Ш@гw&optionV#IV$I@г|)core_typeV,IV-I@@R'@@@R( @@@@,R+@@#zV6I@y@@Ш@г)core_typeV?I@@R9@@@@/R<@@@@T4VS@@@@@@@A@M@+MĠMİVRTVST@@;@@'pvb_pat@@Qw@@@1V_VV`V@@Vx@(pvb_expr@@Qe@@@4VkWVlW@@V@.pvb_constraint @@UؠM@@@7@@@9V|XV}XF@@V@.pvb_attributes @@R@@@<VYGKVYGf@@V@'pvb_loc @@T!t@@@?VZgkVZg@@V@@@A@@@@@N N@@M@#DD?VV@>@@Ш@гG'patternVVVV@@OR@@R@@2R@N@#JJEVW @D@@Ш@гM*expressionVWVW@@UR@@X@@5R@T@#PPFVX,@E@@Ш@гS&optionVX?VXE@гX0value_constraintVX.VX>@@`Rϰ@@@eRа @@h@@:R@_@#[[VVYGY@U@@Ш@г^*attributesVYG[VYGe@@fR@@i@@=R@e@#aaZVZgr@Y@@Ш@гd(LocationVZgtVZg|@kVZg}WZg~@@@sR@@v@@@R@p@@A@NuTWNsNr@NrNr@@@Nr@Nr@+NqNqW]W]@@;@@(pmb_name @@U#locVV@@@B@@@D@@@FW,_W-_@@WE@(pmb_expr @@N@@@IW8`W9`@@WQ@.pmb_attributes@@R@@@LWDa WEa&@@W]@'pmb_loc@@U!t@@@OWRb',WSb'@@@Wk@@@A@@@@@NN@@N@#>>.WZ_@-@@Ш@гABWb_Wc_@гD&optionWk_Wl_@гI&stringWt_Wu_@@QSo@@@VSp @@@\Sq@@_@@GSt@P@#LLGW`@F@@Ш@гO+module_exprW`W`@@WS@@Z@@JS@V@#RRMWa@L@@Ш@гU*attributesWaWa%@@]S@@`@@MS@\@#XXQWb'3@P@@Ш@г[(LocationWb'5Wb'=@bWb'>Wb'?@@@jS@@m@@PS@g@@A@OUWȐOO@OO@@@O@O@@T#SO@WW֐. {1 Toplevel} WfWf@@@@@@3WWWWWWWW@T|O|OOOvOOOO }O O P GP% PB P_ 2Pz PPqP=PPlPP$P QQQ&Q.rQ6QLVQT QjQyQQ Q"1Q"Q#Q$Q%.Q&R&R'IR1(R9)RA*5RW+R_+R-R.R/UR/R0AR0R1R1R2{S>S?1S!E*S7ES?F:SGFSOGXSWGSmHSuMSMTUNSNSO&TvTp@AKX0X/6 {2 Toplevel phrases} X,hX-h@@@@@@YA+/toplevel_phraseDX7jX8j@@;@@(Ptop_defO@@@K@@XFkXGk@@X_@(Ptop_dir2toplevel_directiveD@@@L@@XVlXWl@VI5 [#use], [#load] ... XdlXel+@@@@@@@X}@@@A@@@@@Xhj@@@@X@@#00XokXpk@)@г2)structureXyk3@@93XwXvXvXwXwXwXwXw@L;@@@A@@@@@@@@/;@@@A@@@@@Xn--Xs@@@@X@2directive_argumentD;@@@A@@@@@XuXy@@@@X@7directive_argument_descD;@@@A@@@@@X{X@@@@X@@AQ@@@@S@#OOXlXl@8@гQ2toplevel_directiveXlP@@X-Q@@@@SVXQP@PP@@@P@P@@A@L@+ccXn-1Xn-C@@;@@)pdir_name@@WF#locX@@@M@@@OXpJNXpJd@@X@(pdir_arg@@X7Q@@@R@@@TXqeiXqe@@X@(pdir_loc@@W9!t@@@WXrXr@@Y@@@A@@@@@i@@@f@#22'XpJW@&@@Ш@г56XpJ`XpJc@г8&stringYpJYYpJ_@@@@@@F @@I@@P@?@#;;1Y qeq@0@@Ш@г>&optionYqeYqe@гC2directive_argumentYqesYqe@@K@@@P @@S@@U@J@#FF?Y(r@>@@Ш@гI(LocationY3rY4r@PY7rY8r@@@X@@[@@X@U@@A@@+YAuYBu@@;@@*pdira_desc@@@@@]YNwYOw@@Yg@)pdira_loc@@W!t@@@`Y\xY]x @@Yu@@@A@@@@@@@@@#Ydw@@@Ш@г7directive_argument_descYmwYnw@@&@@)@@^@%@#!!Yvx@@@Ш@г$(LocationYxYx @+Yx Yx @@@3@@6@@a@0@@A@@+Y{Y{.@@;@@+Pdir_stringYj@@@c@@Y|13Y|1J@@Y@(Pdir_intYx@@@dYY@@@e@@@g@@Y}KMY}Ko@@Y@*Pdir_identN"!t@@@h@@Y~prY~p@@Y@)Pdir_boolY@@@i@@Y@@@Y@@@A@@@@@C@@@@@#DDY|15Y|1@@=@гF&stringY|1DG@@MlH@@@@J@#FFY}KOY}KW@5@гH&stringY}K[Y}Ka@@P}@@гM&optionY}KiI@гQ$charZ}KdZ}Kh@@Y@@@^T@@@@V@#RRZ~ptZ~p~@I@гT)LongidentZ~pZ~p@[Z~pY@Z@@b[@@@@]@#YYZ&Z'@S@г[$boolZ0@@b@@@@_@@A@@@]@@XXA@XXAB@VVA@VVA@UQFB@UPB@VyPB@UOB@UO?B@UJB@UIB@U}IB@UwHB@UqHlB@UkH B@UWG`B@UQAiB@U=@B@U74B@U#4B@@3ZZZZZZZZ@ECM@A@ H************************************************************************ZA@@ZA@L@ H ZBMMZBM@ H OCaml ZCZC@ H ZDZD3@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt ZE44ZE4@ H ZFZF@ H Copyright 1996 Institut National de Recherche en Informatique et ZGZG@ H en Automatique. [H[Hg@ H [Ihh[ Ih@ H All rights reserved. This file is distributed under the terms of [J[J@ H the GNU Lesser General Public License version 2.1, with the [K[KN@ H special exception on linking described in the file LICENSE. [LOO[LO@ H [ M[!M@ H************************************************************************[&N['N5@ * Abstract syntax tree produced by parsing {b Warning:} this module is unstable and part of {{!Compiler_libs}compiler-libs}. [, * 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 Y;* 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. X7* {1 Extension points} W * Attributes such as [[\@id ARG]] and [[\@\@id ARG]]. Metadata containers passed around within the AST. The compiler ignores unknown attributes. WR * Extension points such as [[%id ARG] and [%%id ARG]]. Sub-language placeholder -- rejected by the typechecker. V֠ 0* [: SIG] in an attribute or an extension point Q .* [: T] in an attribute or an extension point Q A* [? P] or [? P when E], in an attribute or an extension point Q|4* {1 Core language} V7* {2 Type expressions} V8* [... [\@id1] [\@id2]] PǠ&* [_] P:?* A type variable such as ['a] P! * [Ptyp_arrow(lbl, T1, T2)] represents: - [T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]}, - [~l:T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled]}, - [?l:T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional]}. O j* [Ptyp_tuple(tl)] represents a product type: - [T1 * ... * Tn] when [tl] is [(None, T1); ...; (None, Tn)] - [L1:T1 * ... * Ln:Tn] when [tl] is [(Some L1, T1); ...; (Some Ln, Tn)] - A mix, e.g., [L1:T1 * T2] when [tl] is [(Some L1, T1); (None, T2)] Invariant: [n >= 2]. OР * [Ptyp_constr(lident, l)] represents: - [tconstr] when [l=[]], - [T tconstr] when [l=[T]], - [(T1, ..., Tn) tconstr] when [l=[T1 ; ... ; Tn]]. O V* [Ptyp_object([ l1:T1; ...; ln:Tn ], flag)] represents: - [< l1:T1; ...; ln:Tn >] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, - [< l1:T1; ...; ln:Tn; .. >] when [flag] is {{!Asttypes.closed_flag.Open}[Open]}. O * [Ptyp_class(tconstr, l)] represents: - [#tconstr] when [l=[]], - [T #tconstr] when [l=[T]], - [(T1, ..., Tn) #tconstr] when [l=[T1 ; ... ; Tn]]. OT-* [T as 'a]. O0 * [Ptyp_variant([`A;`B], flag, labels)] represents: - [[ `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, and [labels] is [None], - [[> `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Open}[Open]}, and [labels] is [None], - [[< `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, and [labels] is [Some []], - [[< `A|`B > `X `Y ]] when [flag] is {{!Asttypes.closed_flag.Closed}[Closed]}, and [labels] is [Some ["X";"Y"]]. N * ['a1 ... 'an. T] Can only appear in the following context: - As the {!core_type} of a {{!pattern_desc.Ppat_constraint}[Ppat_constraint]} node corresponding to a constraint on a let-binding: {[let x : 'a1 ... 'an. T = e ...]} - Under {{!class_field_kind.Cfk_virtual}[Cfk_virtual]} for methods (not values). - As the {!core_type} of a {{!class_type_field_desc.Pctf_method}[Pctf_method]} node. - As the {!core_type} of a {{!expression_desc.Pexp_poly}[Pexp_poly]} node. - As the {{!label_declaration.pld_type}[pld_type]} field of a {!label_declaration}. - As a {!core_type} of a {{!core_type_desc.Ptyp_object}[Ptyp_object]} node. - As the {{!value_description.pval_type}[pval_type]} field of a {!value_description}. NӠ0* [(module S)]. N** [M.(T)] N+* [[%id]]. N| * 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) J,* [[ | t ]] Jr/* {2 Patterns} V8* [... [\@id1] [\@id2]] I3* The pattern [_]. H !* A variable pattern such as [x] Hd %* An alias pattern such as [P as 'a] H@ A* Patterns such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n] H' * Patterns such as ['a'..'z']. Other forms of interval are recognized by the parser but rejected by the type-checker. H * [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)] G * [Ppat_variant(`A, pat)] represents: - [`A] when [pat] is [None], - [`A P] when [pat] is [Some P] Gq 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] G;>* Pattern [[| P1; ...; Pn |]] G4* Pattern [P1 | P2] F4* Pattern [(P : T)] Fᠠ4* Pattern [#tconst] F3* Pattern [lazy P] F * [Ppat_unpack(s)] represents: - [(module P)] when [s] is [Some "P"] - [(module _)] when [s] is [None] Note: [(module P : S)] is represented as [Ppat_constraint(Ppat_unpack(Some "P"), Ptyp_package S)] F8* Pattern [exception P] Fj6 Pattern [effect P P] [,--9[,--S@2* Pattern [[%id]] FD2* Pattern [M.(P)] F8* {2 Value expressions} V8* [... [\@id1] [\@id2]] B -* Identifiers such as [x] and [M.x] B 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 _]. A * [Pexp_apply(E0, [(l1, E1) ; ... ; (ln, En)])] represents [E0 ~l1:E1 ... ~ln:En] [li] can be {{!Asttypes.arg_label.Nolabel}[Nolabel]} (non labeled argument), {{!Asttypes.arg_label.Labelled}[Labelled]} (labelled arguments) or {{!Asttypes.arg_label.Optional}[Optional]} (optional argument). Invariant: [n > 0] At ,* [match E0 with P1 -> E1 | ... | Pn -> En] AQ ** [try E0 with P1 -> E1 | ... | Pn -> En] A. ]* [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] A * [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] @x(* [E.l] @R/* [E1.l <- E2] @'6* [[| E1; ...; En |]] @ :* [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]} ?w,* [(E : T)] ?Y * [Pexp_coerce(E, from, T)] represents - [(E :> T)] when [from] is [None], - [(E : T0 :> T)] when [from] is [Some T0]. ?1** [E # m] ? ,* [new M.c] >렠+* [x <- 2] >Ơ * [{< x1 = E1; ...; xn = En >}] >;* [let module M = ME in E] >i9* [let exception C in E] >K k* [assert E]. Note: [assert false] is treated in a special way by the type-checker. >2+* [lazy E] > * Used for method bodies. Can only be used as the expression under {{!class_field_kind.Cfk_concrete}[Cfk_concrete]} for methods (not values). =3* [object ... end] =ݠ6* [fun (type t) -> E] = &* [(module ME)] or [(module ME : S)]. = M* - [M.(E)] - [let open M in E] - [let open! M in E] =x J* - [let* P = E0 in E1] - [let* P0 = E00 and* P1 = E01 in E1] =_** [[%id]] =F&* [.] =3 E* Values of type {!case} represents [(P -> E)] or [(P when E0 -> E)] W ]* [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]}. 3O9* {2 Value descriptions} Và<* [... [\@\@id1] [\@\@id2]] 2Ġ * Values of type {!value_description} represents: - [val x: T], when {{!value_description.pval_prim}[pval_prim]} is [[]] - [external x: T = "s1" ... "sn"] when {{!value_description.pval_prim}[pval_prim]} is [["s1";..."sn"]] V8* {2 Type declarations} V3* [('a1,...'an) t] 1ڠ 1* [... constraint T1=T1' ... constraint Tn=Tn'] 16* for [= private ...] 13* represents [= T] 1l<* [... [\@\@id1] [\@\@id2]] 1U * Here are type declarations and their representation, for various {{!type_declaration.ptype_kind}[ptype_kind]} and {{!type_declaration.ptype_manifest}[ptype_manifest]} values: - [type t] when [type_kind] is {{!type_kind.Ptype_abstract}[Ptype_abstract]}, and [manifest] is [None], - [type t = T0] when [type_kind] is {{!type_kind.Ptype_abstract}[Ptype_abstract]}, and [manifest] is [Some T0], - [type t = C of T | ...] when [type_kind] is {{!type_kind.Ptype_variant}[Ptype_variant]}, and [manifest] is [None], - [type t = T0 = C of T | ...] when [type_kind] is {{!type_kind.Ptype_variant}[Ptype_variant]}, and [manifest] is [Some T0], - [type t = {l: T; ...}] when [type_kind] is {{!type_kind.Ptype_record}[Ptype_record]}, and [manifest] is [None], - [type t = T0 = {l : T; ...}] when [type_kind] is {{!type_kind.Ptype_record}[Ptype_record]}, and [manifest] is [Some T0], - [type t = ..] when [type_kind] is {{!type_kind.Ptype_open}[Ptype_open]}, and [manifest] is [None]. V<* Invariant: non-empty list /:* [l : T [\@id1] [\@id2]] / * - [{ ...; l: T; ... }] when {{!label_declaration.pld_mutable}[pld_mutable]} is {{!Asttypes.mutable_flag.Immutable}[Immutable]}, - [{ ...; mutable l: T; ... }] when {{!label_declaration.pld_mutable}[pld_mutable]} is {{!Asttypes.mutable_flag.Mutable}[Mutable]}. Note: [T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}. V=* [C of ... [\@id1] [\@id2]] . * Values of type {!constructor_declaration} represents the constructor arguments of: - [C of T1 * ... * Tn] when [res = None], and [args = Pcstr_tuple [T1; ... ; Tn]], - [C: T0] when [res = Some T0], and [args = Pcstr_tuple []], - [C: T1 * ... * Tn -> T0] when [res = Some T0], and [args = Pcstr_tuple [T1; ... ; Tn]], - [C of {...}] when [res = None], and [args = Pcstr_record [...]], - [C: {...} -> T0] when [res = Some T0], and [args = Pcstr_record [...]]. -A:* ... [\@\@id1] [\@\@id2] ,{ d* Definition of new extensions constructors for the extensive sum type [t] ([type t += ...]). V}=* [C of ... [\@id1] [\@id2]] +f<* [... [\@\@id1] [\@\@id2]] *ɠ 1* Definition of a new exception ([exception E]). Vh 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].}} *= G* [Pext_rebind(D)] re-export the constructor [D] with the new name [C] *5* {1 Class language} VS .* {2 Type expressions for the class language} VH8* [... [\@id1] [\@id2]] )r ** - [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] (m * 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]} V?<* [... [\@\@id1] [\@\@id2]] '/* [inherit CT] &-* [val x: T] &m b* [method x: T] Note: [T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}. &57* [constraint T1 = T2] &/* [[\@\@\@id]] %+* [[%%id]] %ᠠ<* [... [\@\@id1] [\@\@id2]] $I * 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. V/ /* {2 Value expressions for the class language} U8* [... [\@id1] [\@id2]] #>* [c] and [['a1, ..., 'an] c] "3* [object ... end] "s * [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]. "E * [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] n/* [[\@\@\@id]] U+* [[%%id]] =6* {1 Module language} Uܠ /* {2 Type expressions for the module language} UѠ8* [... [\@id1] [\@id2]] X !* [Pmty_ident(S)] represents [S] Р0* [sig ... end] <* [functor(X : MT1) -> MT2] 0* [MT with ...] v6* [module type of ME] ]** [[%id]] D/* [(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] z2* [module X := M] a -* [module rec X1 : MT1 and ... and Xn : MTn] C +* [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]] m<* [... [\@\@id1] [\@\@id2]] 5 :* Values of type [module_declaration] represents [S : MT] Uࠠ<* [... [\@\@id1] [\@\@id2]] l ;* Values of type [module_substitution] represents [S := M] UР<* [... [\@\@id1] [\@\@id2]]  * Values of type [module_type_declaration] represents: - [S = MT], - [S] for abstract module type declaration, when {{!module_type_declaration.pmtd_type}[pmtd_type]} is [None]. U n* Values of type ['a open_infos] represents: - [open! X] when {{!open_infos.popen_override}[popen_override]} is {{!Asttypes.override_flag.Override}[Override]} (silences the "used identifier shadowing" warning) - [open X] when {{!open_infos.popen_override}[popen_override]} is {{!Asttypes.override_flag.Fresh}[Fresh]} U U* Values of type [open_description] represents: - [open M.N] - [open M(N).O] U q* Values of type [open_declaration] represents: - [open M.N] - [open M(N).O] - [open struct ... end] Ut ?* Values of type [include_description] represents [include MT] UM ?* Values of type [include_declaration] represents [include ME] U3 * [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]] v9* [with module X.Y := Z] I 0* {2 Value expressions for the module language} U*8* [... [\@id1] [\@id2]] &* [X] 73* [struct ... end] ;* [functor(X : MT1) -> ME] -* [ME1(ME2)]  ⠠** [ME1()]  ɠ.* [(ME : MT)]  ,* [(val E)]  ** [[%id]]  z&* [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 = ...]  z3* [type t1 += ...]  a 9* - [exception C of T] - [exception C = M.X]  H2* [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]]  q+* [[%%id]]  T * - [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] U3 =* Values of type [module_binding] represents [module X = ME] U!/* {1 Toplevel} 7* {2 Toplevel phrases} 6* [#use], [#load] ... z@-./boot/ocamlc)-nostdlib"-I&./boot*-use-prims2runtime/primitives"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I'parsing"-I%utils"-I'parsing"-I&typing"-I(bytecomp"-I,file_formats"-I&lambda"-I*middle_end"-I2middle_end/closure"-I2middle_end/flambda"-I=middle_end/flambda/base_types"-I'asmcomp"-I&driver"-I(toplevel"-I%tools"-I'runtime"-I1otherlibs/dynlink"-I-otherlibs/str"-I4otherlibs/systhreads"-I.otherlibs/unix"-I8otherlibs/runtime_events"-c^^ S/home/teraram/ci/builds/workspace/parallel-build/flambda/true/label/ocaml-manycores >10/.-,+*)('&%$#"! @@0fSUQ~3^3^2^2^3^3^3^3^3@^1@@\0E\eǥ]k6e8CamlinternalFormatBasics0oZ2t,ݠ0CamlinternalLazy0;x#5䢜hLm*Format_doc0Mv9630A (Location0nݹV 2f-V P0@#j,6.Nt蠠^k0Z<4$PC&Stdlib0y{x!O!.Stdlib__Buffer0_?K|/V>O}~Nࠠ.Stdlib__Domain0iW',P6wz.Stdlib__Either0FԤ) 4'>.Stdlib__Format0)n[-Ob,Stdlib__Lazy0OM>x9S@!֕!@VJ @ 2E2@Y2W@@Vs!!@X%t,,[@/00&@@^@WW5\W!4('**I@V)ϰX0@ ; z@Wؒ@@@$#@EE}OlO-@@@&&r@Yd@5d5 UdUZsU@X@U)T@@3((-l-B4 3@@Xo'@Z0NF@A;@.-Ѱ8g8?ZLΰRO@!ޕ!@KI4@ L VG8i82BC<+]e]@RP@ؓ%m%@Y5@ °Y7@%9@@װx@@@n22W@@ZU@}m6ؓ6@OkLՕLRPJ@JSGX@21LIOO@@$#@%%@ --k2ē2@,3,@  0V1LוL@g1E|('@U@ZU @&&^+S*@NNO͕OSQ@@kEn@'@]\@H@Y)MߕM@!m }$#]77q\ \9@*r*_ZhE@;"L"9c9D@'L&ɰE@`@Y,*@Wk@@4ܕ3̰JGKH@@  ǰ++gC=@XE@  YԕWђ@TLR@A;A]]"@*)@`Zh8ZF@@++B@10@@An."-88@9 8ΰC<@@$#o0:/˰99r@  @“@  ,f9@Z5@cEJZ0A;]V\@_@X@@@''_@.@@@Z2@""k@XiO2ו2A :D\>@@@:N:/Cœ=UsU4@ 4 аB<@ q NM@@@@  Q>d66v@(۰4b&&aPkOVrV @0e/7%7@$ܓ#@r22TR@W@W.X+԰7Z738H8:@ ԕ W@88@/ .ذ/<.55Eٓ@x@ K66BE5?@O6N@!Ó @11m@@CV@22@ =+@[8@+5+!AƓ;\D=GNGNߕN@88@zZB.Y[Wz@('{@ @@)̓(54@q"(('@%$ذC=@@аN/M@w BW;VU@B?;Ѱ[P8@@"!̰FГA@ $   OV-UV=V@SQ@ZR-Bϓ@@ ' @KHTR{@q@%$F@SQ@--00Q@@@11|@ 0[:H@  @EhFASGG@Nl@ ;*)@F/@@7r7FY@@KH@[v8)@5d777@@&а\0Q@ E @@e*ưK}Hg@@ ŕ oCTR]E]@Y֒ UT@f!22t;C;@@"o!N@@@@LI@Y͒\N2@@XݒHGO)O\LO@ZE$j1b0ͰUGST@iE@ @  ԰[81@PǕP@X D+͕+@MӓK6]W]@Z :0b0,Bړ4@@Zq$?@+ߕ+@**"\.;ɰ]X@"!\Vk@C=F6@L HXW@@[V/@ZE?װMJL@-E,LIVGTn@@@;Õ;@Y)4N3@œ -O@_ٕ_@kS@Z˒(@4ۓ4@@Q1Q@@33%\O@j 65`@Z`"!@@@[2@ !BՓ