S>qeֿ55.5.0+dev0-2025-04-28/)Parsetree(constant!A;@@+pconst_desc#@@)Parsetree-constant_desc@@@Ѱ;../../parsing/parsetree.mliZZ@@)ParsetreeB@*pconst_loci@@(Location!t@@@ #[[@@C@@@A@@@@@Y\@@@@@@A@-constant_desc"A;@@.Pconst_integerj&string@@@ &&optionL$char @@@ '@@@ )@@:_24;_2\@@9D@+Pconst_chark!@@@ *@@Ie Je5@@HE@-Pconst_stringl-"@@@ +(Location#!t@@@ ,5@$@@@ -@@@ /@@lfWYmfW@@kF@,Pconst_floatmP%@@@ 0OM&@@@ 1@@@ 3@@l<>l<d@@G@@@A@@@@@^@@@@A@B@.location_stackB;@@@A$list((Location'!t@@@ @@@ @@@@s  s 0@@@@H@A@)attributeC;@@)attr_name@@(Asttypes*#loc)@@@ @@@ xbfxb}@@P@,attr_payload@@)Parsetree+'payload@@@ y~y~@@Q@(attr_loc@@(Location,!t@@@ zz@@R@@@A@@@@@wOO{@@@@I@A@)extensionC;@@ZA@(Asttypes.#loc-@@@ @@@ ɠ@)Parsetree/'payload@@@ @@ @@@@ B l l B l @@@@J@B@*attributesC;@@A1)Parsetree0)attribute@@@ @@@ @@@@!H  "H  6@@@@ K@B@'payloadC;@@$PStrՐ)Parsetree2)structure@@@ @@9K F H:K F [@@8S@$PSig֐)Parsetree3)signature@@@ @@KL \ ^LL \ q@@JT@$PTypא)Parsetree4)core_type@@@ @@]M  ^M  @@\U@$PPatؐ)Parsetree5'pattern@@@ ҠC)Parsetree6*expression@@@ @@@ @@}N  ~N  @@|V@@@A@@@@@J 8 8@@@@L@B@)core_typeC;@@)ptyp_desc@@)Parsetree7.core_type_desc@@@ ְV  V  @@W@(ptyp_loc@@(Location8!t@@@ ٰW  W  @@X@.ptyp_loc_stack@@)Parsetree9.location_stack@@@ ܰX  X  @@Y@/ptyp_attributes@@)Parsetree:*attributes@@@ ߰Y  Y  4@@Z@@@A@@@@@T  Z S X@@@@M@B@.core_type_descC;@@(Ptyp_anyݐ@@] o q] o {@@[@(Ptyp_varސ;@@@ @@^  ^  @@\@*Ptyp_arrowߐ(Asttypes<)arg_label@@@ )Parsetree=)core_type@@@ )Parsetree>)core_type@@@ @@ _   _  @@ ]@*Ptyp_tupleA@?@@@ @@@ 蠠@)Parsetree@)core_type@@@ @@ @@@ @@4h5h@@3^@+Ptyp_constrᐠ(AsttypesC#loc)LongidentB!t@@@ (@@@ *E)ParsetreeD)core_type@@@ +@@@ -@@^sKM_sK~@@]_@+Ptyp_object萠G)ParsetreeF,object_field@@@ .@@@ 0(AsttypesH+closed_flag@@@ 1@@yacya@@~`@*Ptyp_class鐠(AsttypesJ#loc)LongidentI!t@@@ 2@@@ 4L)ParsetreeK)core_type@@@ 5@@@ 7@@'@@a@*Ptyp_aliasꐠ)ParsetreeM)core_type@@@ 8(AsttypesO#locN@@@ 9@@@ ;@@  5@@b@,Ptyp_variant될@Q)ParsetreeP)row_field@@@ <@@@ >(AsttypesR+closed_flag@@@ ?\T(AsttypesS%label@@@ @@@@ B@@@ D@@IKI@@c@)Ptyp_poly쐠uW(AsttypesV#locU@@@ E@@@ G@@@ I)ParsetreeX)core_type@@@ J@@&RT'R~@@%d@,Ptyp_package퐠)ParsetreeY,package_type@@@ K@@8!#9!A@@7e@)Ptyp_open(Asttypes[#loc)LongidentZ!t@@@ L@@@ N)Parsetree\)core_type@@@ O@@\XZ]X@@[f@.Ptyp_extension)Parsetree])extension@@@ P@@no@@mg@@@A@@@@@r\ Z Z@@@@pN@B@,package_typeC;@@(ppt_path@@(Asttypes_#loc)Longident^!t@@@ Q@@@ S@@h@)ppt_cstrs@@c@(Asttypesa#loc)Longident`!t@@@ V@@@ X@)Parsetreeb)core_type@@@ Y@@ Z@@@ \2@@i@'ppt_loc@@(Locationd!t@@@ _383L@@j@)ppt_attrs@@)Parsetreee*attributes@@@ bMRMh@@k@@@A@@@@@in@@@@O@B@)row_fieldC;@@(prf_desc@@)Parsetreef.row_field_desc@@@ h@@l@'prf_loc@@(Locationg!t@@@ k@@m@.prf_attributes@@)Parsetreeh*attributes@@@ n@@n@@@A@@@@@nn@@@@P@B@.row_field_descC;@@$Rtag(Asttypesj#loc(Asttypesi%label@@@ q@@@ s$boolk@@@ tm)Parsetreel)core_type@@@ u@@@ w@@RS@@Qo@(Rinherit)Parsetreen)core_type@@@ x@@d W Ye W p@@cp@@@A@@@@@h@@@@fQ@B@,object_fieldC;@@(pof_desc@@)Parsetreeo1object_field_desc@@@ y}  ~  @@|q@'pof_loc@@(Locationp!t@@@ |    @@r@.pof_attributes@@)Parsetreeq*attributes@@@     @@s@@@A@@@@@    @@@@R@B@1object_field_descC;@@$Otag(Asttypess#loc(Asttypesr%label@@@ @@@ )Parsetreet)core_type@@@ @@! ! ! !,@@t@(Oinherit)Parsetreeu)core_type@@@ @@!-!/!-!F@@u@@@A@@@@@  @@@@S@B@'patternC;@@)ppat_desc@@)Parsetreev,pattern_desc@@@ !q!v!q!@@v@(ppat_loc@@(Locationw!t@@@ !!!!@@w@.ppat_loc_stack@@)Parsetreex.location_stack@@@ !!!!@@x@/ppat_attributes@@)Parsetreey*attributes@@@ &!!'!!@@%y@@@A@@@@@*!]!]+""@@@@)T@B@,pattern_descC;@@(Ppat_any@@9")"+:")"5@@8z@(Ppat_var(Asttypes{#loc%z@@@ @@@ @@Q"O"QR"O"i@@P{@*Ppat_alias)Parsetree|'pattern@@@ (Asttypes~#locF}@@@ @@@ @@r""s""@@q|@-Ppat_constant)Parsetree(constant@@@ @@"""#@@}@-Ppat_interval)Parsetree(constant@@@ )Parsetree(constant@@@ @@#R#T#R#z@@~@*Ppat_tuple@@@@ @@@ @)Parsetree'pattern@@@ @@ @@@ (Asttypes+closed_flag@@@ @@$$$$Z@@@.Ppat_construct(Asttypes#loc)Longident!t@@@ @@@ @`(Asttypes#loc@@@ @@@ @@@ @)Parsetree'pattern@@@ @@ @@@ @@&m&o&m&@@@,Ppat_variant (Asttypes%label@@@ )Parsetree'pattern@@@ @@@ @@3(+(-4(+(U@@2@+Ppat_record @(Asttypes#loc)Longident!t@@@ @@@ @)Parsetree'pattern@@@ @@ @@@ (Asttypes+closed_flag@@@ @@k((l()(@@j@*Ppat_array )Parsetree'pattern@@@ @@@ @@*w*y*w*@@@'Ppat_or )Parsetree'pattern@@@ )Parsetree'pattern@@@ @@****@@@/Ppat_constraint )Parsetree'pattern@@@  )Parsetree)core_type@@@ @@ ** *+@@@)Ppat_type(Asttypes#loc)Longident!t@@@ @@@ @@!+:+<!+:+Z@@@)Ppat_lazy)Parsetree'pattern@@@ @@"+u+w"+u+@@@+Ppat_unpack(Asttypes#locˠ@@@ @@@ @@@ @@#++#++@@@.Ppat_exception)Parsetree'pattern@@@ @@+,,+,,@@@+Ppat_effect)Parsetree'pattern@@@ Π)Parsetree'pattern@@@ @@0,--1,--8@@/@.Ppat_extension)Parsetree)extension@@@ @@B--T-VC--T-s@@A@)Ppat_open(Asttypes#loc)Longident!t@@@ @@@ Ӡ)Parsetree'pattern@@@ @@f.--g.--@@e@@@A@@@@@j""@@@@hU@B@*expressionC;@@)pexp_desc@@)Parsetree/expression_desc@@@ հ4.. 4..%@@~@(pexp_loc@@(Location!t@@@ ذ5.&.+5.&.@@@@.pexp_loc_stack@@)Parsetree.location_stack@@@ ۰6.A.F6.A.e@@@/pexp_attributes@@)Parsetree*attributes@@@ ް7.f.k7.f.@@@@@A@@@@@2--8..@@@@V@B@/expression_descC;@@*Pexp_ident(Asttypes#loc)Longident!t@@@ @@@ @@;..;..@@@-Pexp_constant)Parsetree(constant@@@ @@>//>//:@@@(Pexp_let(Asttypes(rec_flag@@@ e)Parsetree-value_binding@@@ @@@ )Parsetree*expression@@@ @@A//A//@@@-Pexp_function)Parsetree.function_param@@@ @@@ )Parsetree/type_constraint@@@ @@@ )Parsetree-function_body@@@ @@?H1517@I1J1@@>@*Pexp_apply)Parsetree*expression@@@ @(Asttypes)arg_label@@@ @)Parsetree*expression@@@ @@ @@@ @@nX44oX44Y@@m@*Pexp_match)Parsetree*expression@@@ )Parsetree$case@@@ @@@ @@c55c56@@@(Pexp_try)Parsetree*expression@@@ )Parsetree$case@@@ @@@ @@e6T6Ve6T6z@@@*Pexp_tuple &@@@@ @@@ @)Parsetree*expression@@@ @@ @@@ @@g66g66@@@.Pexp_construct!(Asttypes#loc)Longident!t@@@ @@@ Ǡ)Parsetree*expression@@@ @@@ @@ r8L8N r8L8@@ @,Pexp_variant"(Asttypes%label@@@ )Parsetree*expression@@@ @@@ @@ !x9x9z "x9x9@@ @+Pexp_record#ɠ@(Asttypes#loc)Longident!t@@@ @@@ @)Parsetree*expression@@@ @@ @@@  $)Parsetree*expression@@@ @@@ @@ ^}:5:7 _}:5:@@ ]@*Pexp_field$)Parsetree*expression@@@ (Asttypes#loc)Longident!t@@@ @@@ @@ ;z;| ;z;@@ @-Pexp_setfield%)Parsetree*expression@@@ (Asttypes#loc)Longident!t@@@ @@@ !)Parsetree*expression@@@ "@@ ;; ;;@@ @*Pexp_array& %Ӡ)Parsetree*expression@@@ #@@@ %@@ << <<1@@ @/Pexp_ifthenelse')Parsetree*expression@@@ &)Parsetree*expression@@@ ' )Parsetree*expression@@@ (@@@ *@@  ]=<=@@ [@/Pexp_constraint+)Parsetree*expression@@@ 4)Parsetree)core_type@@@ 5@@ w>> x>>@@ v@+Pexp_coerce,)Parsetree*expression@@@ 6 ])Parsetree)core_type@@@ 7@@@ 9)Parsetree)core_type@@@ :@@ ? ? ? ?I@@ @)Pexp_send-)Parsetree*expression@@@ ;(Asttypes#loc(Asttypes%label@@@ <@@@ >@@ ?? ?@@@ @(Pexp_new.(Asttypes#loc)Longident!t@@@ ?@@@ A@@ @*@, @*@I@@ @/Pexp_setinstvar/(Asttypes#loc(Asttypes%label@@@ B@@@ D)Parsetree*expression@@@ E@@ @\@^ @\@@@ @-Pexp_override0 y@(Asttypes#loc(Asttypes%label@@@ F@@@ H@)Parsetree*expression@@@ I@@ J@@@ L@@ 2@@ 3@@@@ 1@0Pexp_struct_item1)Parsetree.structure_item@@@ M)Parsetree*expression@@@ N@@ M@@ N@A,@@ L@+Pexp_assert2)Parsetree*expression@@@ O@@ _AHAJ `AHAe@@ ^@)Pexp_lazy3)Parsetree*expression@@@ P@@ qAA rAA@@ p@)Pexp_poly4)Parsetree*expression@@@ Q W)Parsetree)core_type@@@ R@@@ T@@ B B  B B7@@ @+Pexp_object5)Parsetree/class_structure@@@ U@@ BB BC@@ @,Pexp_newtype6(Asttypes#loc @@@ V@@@ X)Parsetree*expression@@@ Y@@ C/C1 C/CZ@@ @)Pexp_pack7)Parsetree+module_expr@@@ Z )Parsetree,package_type@@@ [@@@ ]@@ CwCy CwC@@ @*Pexp_letop8)Parsetree%letop@@@ ^@@ CC CC@@ @.Pexp_extension9)Parsetree)extension@@@ _@@ DHDJ DHDg@@ @0Pexp_unreachable:@@ DxDz DxD@@ @@@A@@@@@ :..@@@@ W@B@$caseC;@@&pc_lhs;@@)Parsetree'pattern@@@ ` *DD +DD@@ )@(pc_guard<@@ )Parsetree*expression@@@ c@@@ e ?DD @DD@@ >@&pc_rhs=@@)Parsetree*expression@@@ h ODD PDD@@ N@@@A@@@@@ SDD TDE@@@@ RX@B@%letopC;@@$let_>@@)Parsetree*binding_op@@@ k iE\E` jE\Er@@ h@$ands?@@ )Parsetree*binding_op@@@ n@@@ p EsEw EsE@@ ~@$body@@@)Parsetree*expression@@@ s EE EE@@ @@@A@@@@@ ELEL EE@@@@ Y@B@*binding_opC;@@'pbop_opA@@(Asttypes#loc @@@ v@@@ x EE EE@@ @(pbop_patB@@)Parsetree'pattern@@@ { EE EE@@ @(pbop_expC@@)Parsetree *expression@@@ ~ EE EF @@ @(pbop_locD@@(Location !t@@@  F F F F'@@ @@@A@@@@@ EE F(F+@@@@ Z@B@3function_param_descC;@@*Pparam_valE(Asttypes )arg_label@@@  Ϡ)Parsetree *expression@@@ @@@ )Parsetree 'pattern@@@ @@ FGFI FGF@@ @.Pparam_newtypeF(Asttypes#loc @@@ @@@ @@ *HH +HI@@ )@@@A@@@@@ .F-F-@@@@ ,[@B@.function_paramC;@@*pparam_locG@@(Location!t@@@  CLrLv DLrL@@ B@+pparam_descH@@)Parsetree3function_param_desc@@@  SLL TLL@@ R@@@A@@@@@ WL]L] XLL@@@@ V\@B@-function_bodyC;@@.Pfunction_bodyI)Parsetree*expression@@@ @@ oLL pLL@@ n@/Pfunction_casesJ )Parsetree$case@@@ @@@ (Location!t@@@ )Parsetree*attributes@@@ @@ LL LM*@@ @@@A@@@@@ LL@@@@ ]@B@/type_constraintC;@@+PconstraintK)Parsetree)core_type@@@ @@ NN NN@@ @'PcoerceL )Parsetree)core_type@@@ @@@ )Parsetree)core_type@@@ @@ NN NN@@ @@@A@@@@@ NN@@@@ ^@B@1value_descriptionC;@@)pval_nameM@@(Asttypes#loc @@@ @@@   OpOu  OpO@@ @)pval_typeN@@)Parsetree)core_type@@@ OOOO@@@)pval_primO@@ w @@@ @@@ OOOO@@@/pval_attributesP@@)Parsetree*attributes@@@ &OO'OO@@%@(pval_locQ@@(Location !t@@@ 6PP 7PP"@@5@@@A@@@@@: OROR;P#P(@@@@9_@B@0type_declarationC;@@*ptype_nameR@@(Asttypes"#loc*!@@@ @@@ VQjQoWQjQ@@U@,ptype_paramsS@@ &@)Parsetree#)core_type@@@ @@(Asttypes$(variance@@@ @(Asttypes%+injectivity@@@ @@ @@ @@@ ðQQQQ@@@+ptype_cstrsT@@ *@)Parsetree')core_type@@@ Ơ@)Parsetree()core_type@@@ Ǡ@(Location)!t@@@ @@ @@@ ˰!QQ!QR!@@@*ptype_kindU@@)Parsetree+)type_kind@@@ ΰ#R^Rc#R^Ry@@@-ptype_privateV@@(Asttypes,,private_flag@@@ Ѱ$RzR$RzR@@@.ptype_manifestW@@)Parsetree-)core_type@@@ @@@ ְ%RR%RR@@@0ptype_attributesX@@)Parsetree.*attributes@@@ ٰ&RR&RS@@@)ptype_locY@@(Location/!t@@@ ܰ 'S=SB 'S=SX@@ @@@A@@@@@QMQM(SYS^@@@@`@B@)type_kindC;@@.Ptype_abstractZ@@DX X"DX X2@@@-Ptype_variant[1)Parsetree07constructor_declaration@@@ @@@ @@6EX3X57EX3Xd@@5@,Ptype_record\3)Parsetree21label_declaration@@@ @@@ @@NFXeXgOFXeX@@M@*Ptype_open]@@WGXXXGXX@@V@@@A@@@@@[CXX@@@@Ya@B@1label_declarationC;@@(pld_name^@@(Asttypes5#locJ4@@@ @@@ vKXXwKXX@@u@+pld_mutable_@@(Asttypes6,mutable_flag@@@ LXYLXY@@@(pld_type`@@)Parsetree7)core_type@@@ MYY MYY4@@@'pld_loca@@(Location8!t@@@ NY5Y:NY5YN@@@.pld_attributesb@@)Parsetree9*attributes@@@ OYOYTOYOYo@@@@@A@@@@@IXXPYY@@@@b@B@7constructor_declarationC;@@(pcd_namec@@(Asttypes;#loc:@@@ @@@ ^[}[^[}[@@@(pcd_varsd@@J>(Asttypes=#loc<@@@ @@@ @@@ _[[_[[@@@(pcd_argse@@)Parsetree?5constructor_arguments@@@ `[[`[[@@@'pcd_resf@@ݠ)Parsetree@)core_type@@@ @@@ a[[a[[@@@'pcd_locg@@(LocationA!t@@@ 'b[\(b[\@@&@.pcd_attributesh@@)ParsetreeB*attributes@@@ 7c\\8c\\8@@6@@@A@@@@@;\[Y[Y<d\\\a@@@@:c@B@5constructor_argumentsC;@@+Pcstr_tupleiD)ParsetreeC)core_type@@@ @@@ @@Yg\\Zg\\@@X@,Pcstr_recordjF)ParsetreeE1label_declaration@@@ @@@ @@qh\\rh\\@@p@@@A@@@@@uf\c\c@@@@sd@B@.type_extensionC;@@+ptyext_pathk@@(AsttypesH#loc)LongidentG!t@@@ @@@ !y__y__@@@-ptyext_paramsl@@L@)ParsetreeI)core_type@@@ $@@(AsttypesJ(variance@@@ %@(AsttypesK+injectivity@@@ &@@ '@@ (@@@ *z__z__@@@3ptyext_constructorsm@@9N)ParsetreeM5extension_constructor@@@ -@@@ /{__{_`%@@@.ptyext_privaten@@(AsttypesO,private_flag@@@ 2|`&`+|`&`H@@@*ptyext_loco@@(LocationP!t@@@ 5}`I`N}`I`e@@@1ptyext_attributesp@@)ParsetreeQ*attributes@@@ 8 ~`f`k ~`f`@@ @@@A@@@@@w_q_q``@@@@e@B@5extension_constructorC;@@)pext_nameq@@(AsttypesS#locR@@@ >@@@ @+a<aA,a<aW@@*@)pext_kindr@@)ParsetreeT:extension_constructor_kind@@@ C;aXa]<aXa@@:@(pext_locs@@(LocationU!t@@@ FKaaLaa@@J@/pext_attributest@@)ParsetreeV*attributes@@@ I[aa\aa@@Z@@@A@@@@@_aa`aa@@@@^f@B@.type_exceptionC;@@2ptyexn_constructoru@@)ParsetreeW5extension_constructor@@@ Oubbvbb2@@t@*ptyexn_locv@@(LocationX!t@@@ Rb3b7b3bO@@@1ptyexn_attributesw@@)ParsetreeY*attributes@@@ UbPbTbPbs@@@@@A@@@@@aabb@@@@g@B@:extension_constructor_kindC;@@)Pext_declx\(Asttypes[#locZ@@@ X@@@ Z@@@ \)Parsetree]5constructor_arguments@@@ ])Parsetree^)core_type@@@ ^@@@ `@@bbbc=@@@+Pext_rebindy(Asttypes`#loc)Longident_!t@@@ a@@@ c@@ffff@@@@@A@@@@@bb@@@@h@B@*class_typeC;@@)pcty_descz@@)Parsetreea/class_type_desc@@@ dgggl ggg@@@(pcty_loc{@@(Locationb!t@@@ ggggg@@@/pcty_attributes|@@)Parsetreec*attributes@@@ j(gg)gg@@'@@@A@@@@@,gPgP-gg@@@@+i@B@/class_type_descC;@@+Pcty_constr}(Asttypese#loc)Longidentd!t@@@ m@@@ og)Parsetreef)core_type@@@ p@@@ r@@\hh]hh3@@[@.Pcty_signature~)Parsetreeh/class_signature@@@ s@@nhihkohih@@m@*Pcty_arrow(Asttypesi)arg_label@@@ t)Parsetreej)core_type@@@ u)Parsetreek*class_type@@@ v@@hhhh@@@.Pcty_extension)Parsetreel)extension@@@ w@@jUjWjUjt@@@)Pcty_open)Parsetreem0open_description@@@ x)Parsetreen*class_type@@@ y@@jjjj@@@@@A@@@@@gg@@@@j@B@/class_signatureC;@@*pcsig_self@@)Parsetreeo)core_type@@@ zjjjk@@@,pcsig_fields@@Lq)Parsetreep0class_type_field@@@ }@@@ kk kk/@@@@@A@@@@@jjk0k5@@@@k@B@0class_type_fieldC;@@)pctf_desc@@)Parsetreer5class_type_field_desc@@@ l4l9 l4lZ@@@(pctf_loc@@(Locations!t@@@ l[l`l[lu@@@/pctf_attributes@@)Parsetreet*attributes@@@ (lvl{)lvl@@'@@@A@@@@@,ll-ll@@@@+l@B@5class_type_field_descC;@@,Pctf_inherit)Parsetreeu*class_type@@@ @@DllEll@@C@(Pctf_val@(Asttypesw#loc(Asttypesv%label@@@ @@@ @(Asttypesx,mutable_flag@@@ @(Asttypesy,virtual_flag@@@ @)Parsetreez)core_type@@@ @@ @@mmmmV@@@+Pctf_method@(Asttypes|#loc(Asttypes{%label@@@ @@@ @(Asttypes},private_flag@@@ @(Asttypes~,virtual_flag@@@ @)Parsetree)core_type@@@ @@ @@momqmom@@@/Pctf_constraint@)Parsetree)core_type@@@ @)Parsetree)core_type@@@ @@ @@n%n'n%nS@@@.Pctf_attribute)Parsetree)attribute@@@ @@nqnsnqn@@@.Pctf_extension)Parsetree)extension@@@ @@nnnn@@@@@A@@@@@ll@@@@m@B@+class_infosC;!a@ @A(pci_virt@@(Asttypes,virtual_flag@@@  nn!no@@@*pci_params@@@)Parsetree)core_type@@@ @@(Asttypes(variance@@@ @(Asttypes+injectivity@@@ @@ @@ @@@ RooSooM@@Q@(pci_name@@(Asttypes#loc<@@@ @@@ hoNoSioNoh@@g@(pci_expr@@cD@ roionsoio{@@q@'pci_loc@@(Location!t@@@ o|oo|o@@ @.pci_attributes@@)Parsetree*attributes@@@ oooo@@ @@@A@Y@@@@@nnoo@@@@n@B@1class_descriptionC;@@A)Parsetree+class_infos)Parsetree*class_type@@@ @@@ @@@@pppp@@@@o@B@6class_type_declarationC;@@*A)Parsetree+class_infos)Parsetree*class_type@@@ @@@ @@@@pppq @@@@p@B@*class_exprC;@@(pcl_desc@@)Parsetree/class_expr_desc@@@ qYq^qYqx@@ @'pcl_loc@@(Location!t@@@ İqyq~qyq@@ @.pcl_attributes@@)Parsetree*attributes@@@ ǰqqqq@@ @@@A@@@@@qBqB qq@@@@q@B@/class_expr_descC;@@*Pcl_constr(Asttypes#loc)Longident!t@@@ @@@ ̠)Parsetree)core_type@@@ @@@ @@8qq9qr!@@7@-Pcl_structure)Parsetree/class_structure@@@ @@JrKrMKrKro@@I@'Pcl_fun(Asttypes)arg_label@@@ Ѡ0)Parsetree*expression@@@ @@@ Ԡ)Parsetree'pattern@@@ ՠ)Parsetree*class_expr@@@ @@| rr} rr@@{@)Pcl_apply)Parsetree*class_expr@@@ נ@(Asttypes)arg_label@@@ ؠ@)Parsetree*expression@@@ @@ @@@ @@u}uu}u@@@'Pcl_let(Asttypes(rec_flag@@@ ݠ*)Parsetree-value_binding@@@ @@@ )Parsetree*class_expr@@@ @@ vv vv@@@.Pcl_constraint)Parsetree*class_expr@@@ )Parsetree*class_type@@@ @@'xFxH'xFxs@@@-Pcl_extension)Parsetree)extension@@@ @@(xx(xx@@@(Pcl_open)Parsetree0open_description@@@ )Parsetree*class_expr@@@ @@)xx)xx@@@@@A@@@@@!qq@@@@r@B@/class_structureC;@@*pcstr_self@@)Parsetree'pattern@@@ 6-yy"7-yy6@@5@,pcstr_fields@@)Parsetree+class_field@@@ @@@ L.y7y<M.y7y[@@K@@@A@@@@@P+yyQ/y\ya@@@@Os@B@+class_fieldC;@@(pcf_desc@@)Parsetree0class_field_desc@@@ f8zYz^g8zYzy@@e@'pcf_loc@@(Location!t@@@ v9zzzw9zzz@@u@.pcf_attributes@@)Parsetree*attributes@@@ :zz:zz@@@@@A@@@@@6zAzA;zz@@@@t@B@0class_field_descC;@@+Pcf_inherit(Asttypes-override_flag@@@ )Parsetree*class_expr@@@ (Asttypes#loc@@@ @@@ @@@ @@>zz>z{6@@@'Pcf_val@(Asttypes#loc(Asttypes%label@@@ @@@@(Asttypes,mutable_flag@@@@)Parsetree0class_field_kind@@@@@@@M}}M}}@@@*Pcf_method@(Asttypes#loc(Asttypes%label@@@@@@@(Asttypes,private_flag@@@@)Parsetree0class_field_kind@@@ @@ @@%\&\5@@$@.Pcf_constraint@)Parsetree)core_type@@@ @)Parsetree)core_type@@@ @@ @@EbFbH@@D@/Pcf_initializer)Parsetree*expression@@@@@WcfhXcf@@V@-Pcf_attribute)Parsetree)attribute@@@@@idjd@@h @-Pcf_extension)Parsetree)extension@@@@@{e|e@@z!@@@A@@@@@=zz@@@@}u@B@0class_field_kindC;@@+Cfk_virtual)Parsetree)core_type@@@@@hh8@@"@,Cfk_concrete(Asttypes-override_flag@@@)Parsetree*expression@@@@@i9;i9g@@#@@@A@@@@@g@@@@v@B@1class_declarationC;@@+A)Parsetree+class_infos)Parsetree*class_expr@@@@@@@@@@kiiki@@@@w@B@+module_typeC;@@)pmty_desc@@)Parsetree0module_type_desc@@@rr"@@$@(pmty_loc@@(Location!t@@@s#(s#=@@%@/pmty_attributes@@)Parsetree*attributes@@@t>Ct>_@@&@@@A@@@@@ p u~@@@@x@B@0module_type_descC;@@*Pmty_ident(Asttypes#loc)Longident!t@@@ @@@"@@*x+x@@)'@.Pmty_signature)Parsetree)signature@@@#@@<y=y@@;(@,Pmty_functor)Parsetree1functor_parameter@@@$)Parsetree+module_type@@@%@@WzXzN@@V)@)Pmty_with)Parsetree+module_type@@@&Р)Parsetree/with_constraint@@@'@@@)@@x|vxy|v@@w*@+Pmty_typeof)Parsetree+module_expr@@@*@@}}@@+@.Pmty_extension)Parsetree)extension@@@+@@~~@@,@*Pmty_alias(Asttypes#loc)Longident!t@@@,@@@.@@+-+L@@-@@@A@@@@@w@@@@y@B@1functor_parameterC;@@$Unit@@{}{@@.@%Named(Asttypes#loc@@@/@@@1@@@3)Parsetree+module_type@@@4@@@@/@@@A@@@@@cc@@@@z@B@)signatureC;@@iAh٠)Parsetree.signature_item@@@5@@@7@@@@ KK Kn@@@@ {@B@.signature_itemC;@@)psig_desc@@)Parsetree3signature_item_desc@@@8 !@@0@(psig_loc@@(Location!t@@@;01@@/1@@@A@@@@@4pp5@@@@3|@B@3signature_item_descC;@@*Psig_value)Parsetree1value_description@@@>@@LM@@K2@)Psig_type(Asttypes(rec_flag@@@?ߠ)Parsetree0type_declaration@@@@@@@B@@macna@@l3@.Psig_typesubst)Parsetree0type_declaration@@@C@@@E@@@@4@+Psig_typext)Parsetree.type_extension@@@F@@')'H@@5@.Psig_exception)Parsetree.type_exception@@@G@@bdb@@6@+Psig_module)Parsetree2module_declaration@@@H@@@@7@-Psig_modsubst)Parsetree3module_substitution@@@I@@@@8@.Psig_recmoduleC)Parsetree2module_declaration@@@J@@@L@@464a@@9@,Psig_modtype)Parsetree7module_type_declaration@@@M@@@@:@1Psig_modtypesubstÐ)Parsetree7module_type_declaration@@@N@@  ,@@;@)Psig_openĐ)Parsetree0open_description@@@O@@SUSt@@<@,Psig_includeŐ)Parsetree3include_description@@@P@@-.@@,=@*Psig_classƐ)Parsetree1class_description@@@Q@@@S@@EF@@D>@/Psig_class_typeǐ)Parsetree6class_type_declaration@@@T@@@V@@]!^Q@@\?@.Psig_attributeȐ)Parsetree)attribute@@@W@@op@@n@@.Psig_extensionɐ)Parsetree)extension@@@X)Parsetree*attributes@@@Y@@@@A@@@A@@@@@@@@@}@B@2module_declarationC;@@(pmd_name@@(Asttypes#locv@@@Z@@@\@@@^$@@@B@(pmd_type@@)Parsetree+module_type@@@aAFA\@@C@.pmd_attributes@@)Parsetree*attributes@@@d]b]}@@D@'pmd_loc@@(Location!t@@@g@@E@@@A@@@@@@@@@~@B@3module_substitutionC;@@(pms_name@@(Asttypes#loc@@@m@@@o % :@@F@,pms_manifest@@(Asttypes#loc)Longident!t@@@r@@@t;@;^@@G@.pms_attributes@@)Parsetree*attributes@@@w'_d(_@@&H@'pms_loc@@(Location!t@@@z78@@6I@@@A@@@@@;<@@@@:@B@7module_type_declarationC;@@)pmtd_name@@(Asttypes#loc+@@@@@@W',X'B@@VJ@)pmtd_type@@2)Parsetree+module_type@@@@@@lCHmCf@@kK@/pmtd_attributes@@)Parsetree*attributes@@@|gl}g@@{L@(pmtd_loc@@(Location!t@@@@@M@@@A@@@@@@@@@@@B@*open_infosC;!a@@A*popen_expr@@ D@@@N@.popen_override@@(Asttypes-override_flag@@@@@O@)popen_loc@@(Location!t@@@@@P@0popen_attributes@@)Parsetree*attributes@@@@@Q@@@A@Y@@@@@ %@@@@A@B@0open_descriptionC;@@RA)Parsetree*open_infos(Asttypes#loc)Longident!t@@@@@@@@@@@@@@@@@B@B@0open_declarationC;@@vA)Parsetree *open_infos)Parsetree +module_expr@@@@@@@@@@'''T@@@@C@B@-include_infosC;!a@@A)pincl_mod@@ D@/0@@.R@)pincl_loc@@(Location !t@@@?@@@>S@0pincl_attributes@@)Parsetree *attributes@@@OP;@@NT@@@A@Y@@@@@UV<A@@@@TD@B@3include_descriptionC;@@A)Parsetree-include_infos)Parsetree +module_type@@@@@@@@@@pCCqCv@@@@oE@B@3include_declarationC;@@A)Parsetree-include_infos)Parsetree+module_expr@@@@@@@@@@@@@@F@B@/with_constraintC;@@*Pwith_typeݐ(Asttypes#loc)Longident!t@@@@@@)Parsetree0type_declaration@@@@@KMK@@U@,Pwith_moduleސ(Asttypes#loc)Longident!t@@@@@@(Asttypes#loc)Longident!t@@@@@@@@H@@V@-Pwith_modtypeߐ(Asttypes#loc)Longident!t@@@@@@Ơ)Parsetree+module_type@@@@@lnl@@W@2Pwith_modtypesubst(Asttypes#loc)Longident!t@@@@@@ʠ)Parsetree+module_type@@@@@*+@@)X@/Pwith_typesubstᐠ(Asttypes#loc)Longident!t@@@@@@Π)Parsetree 0type_declaration@@@@@N.0O.g@@MY@.Pwith_modsubst␠(Asttypes"#loc)Longident!!t@@@@@@Ҡ(Asttypes$#loc)Longident#!t@@@@@@@@{|@@zZ@@@A@@@@@55@@@@}G@B@+module_exprC;@@)pmod_desc@@)Parsetree%0module_expr_desc@@@ְTYTu@@[@(pmod_loc@@(Location&!t@@@ٰv{v@@\@/pmod_attributes@@)Parsetree'*attributes@@@ܰ  @@]@@@A@@@@@<< @@@@H@B@0module_expr_descC;@@*Pmod_ident搠(Asttypes)#loc)Longident(!t@@@@@@@@  @@^@.Pmod_structure琠)Parsetree*)structure@@@@@<@@_@,Pmod_functor萠)Parsetree+1functor_parameter@@@)Parsetree,+module_expr@@@@@VXV@@`@*Pmod_apply鐠)Parsetree-+module_expr@@@)Parsetree.+module_expr@@@@@!"@@ a@/Pmod_apply_unitꐠ)Parsetree/+module_expr@@@@@34@@2b@/Pmod_constraint될)Parsetree0+module_expr@@@)Parsetree1+module_type@@@@@N "O P@@Mc@+Pmod_unpack쐠)Parsetree2*expression@@@@@`egae@@_d@.Pmod_extension퐠)Parsetree3)extension@@@@@rs@@qe@@@A@@@@@v @@@@tI@B@)structureC;@@A5)Parsetree4.structure_item@@@@@@@@@@@@@@J@B@.structure_itemC;@@)pstr_desc@@)Parsetree63structure_item_desc@@@ *@@f@(pstr_loc@@(Location7!t@@@+0+E@@g@@@A@@@@@FK@@@@K@B@3structure_item_descC;@@)Pstr_eval)Parsetree8*expression@@@)Parsetree9*attributes@@@@@ gi g@@h@*Pstr_value(Asttypes:(rec_flag@@@W<)Parsetree;-value_binding@@@@@@@@!!@@i@.Pstr_primitive)Parsetree=1value_description@@@@@ ( (D@@ j@)Pstr_type(Asttypes>(rec_flag@@@@)Parsetree?0type_declaration@@@@@@@@,+-+@@+k@+Pstr_typext)ParsetreeA.type_extension@@@@@>-?-@@=l@.Pstr_exception)ParsetreeB.type_exception@@@@@P.,.Q.,P@@Om@+Pstr_module)ParsetreeC.module_binding@@@@@b1c1@@an@.Pstr_recmoduleE)ParsetreeD.module_binding@@@@@@@@z2{2@@yo@,Pstr_modtype)ParsetreeF7module_type_declaration@@@@@41341\@@p@)Pstr_open)ParsetreeG0open_declaration@@@@@5z|5z@@q@*Pstr_classI)ParsetreeH1class_declaration@@@@@@ @@66@@r@/Pstr_class_type,K)ParsetreeJ6class_type_declaration@@@ @@@ @@8  8 ;@@s@,Pstr_include)ParsetreeL3include_declaration@@@@@:vx:v@@t@.Pstr_attribute)ParsetreeM)attribute@@@@@;;@@u@.Pstr_extension)ParsetreeN)extension@@@)ParsetreeO*attributes@@@@@ < <@@ v@@@A@@@@@ MM@@@@ L@B@0value_constraintC;@@.Pvc_constraint8locally_abstract_univars@@R(AsttypesQ#loc P@@@@@@@@@ 7@V\ 8@V@@ 6w@#typ@@)ParsetreeS)core_type@@@ GA HA@@ Fx@@@ K?>@ LB@@ Jy@,Pvc_coercion&ground@@ +)ParsetreeT)core_type@@@@@@ eC fC@@ dz@(coercion@@)ParsetreeU)core_type@@@! uC vC@@ t{@@@ yC zC@@ x|@@@A@@@@@ }>''@@@@ {M@B@-value_bindingC;@@'pvb_pat@@)ParsetreeV'pattern@@@$ P P@@ }@(pvb_expr@@)ParsetreeW*expression@@@' Q Q@@ ~@.pvb_constraint@@ })ParsetreeX0value_constraint@@@*@@@, R RE@@ @.pvb_attributes@@)ParsetreeY*attributes@@@/ SFJ SFe@@ @'pvb_loc @@(LocationZ!t@@@2 Tfj Tf~@@ @@@A@@@@@ N U@@@@ N@B@.module_bindingC;@@(pmb_name @@(Asttypes\#loc Ġ [@@@5@@@7@@@9 Y Y@@ @(pmb_expr @@)Parsetree]+module_expr@@@<! Z! Z@@! @.pmb_attributes @@)Parsetree^*attributes@@@?![ ![%@@!@'pmb_loc @@(Location_!t@@@B!,\&+!-\&?@@!+@@@A@@@@@!0W!1]@E@@@@!/O@B@/toplevel_phraseD;@@(Ptop_def)Parsetree`)structure@@@@@!He!Ie@@!G@(Ptop_dir)Parsetreea2toplevel_directive@@@@@!Zf![f@@!Y@@@A@@@@@!^d@@@@!\@A@2toplevel_directiveD;@@)pdir_name@@(Asttypesc#loc!Mb@@@@@@װ!yjIM!zjIc@@!x@(pdir_arg@@!T)Parsetreed2directive_argument@@@@@@ܰ!kdh!kd@@!@(pdir_loc@@(Locatione!t@@@߰!l!l@@!@@@A@@@@@!h,,!m@@@@!@B@2directive_argumentD;@@*pdira_desc@@)Parsetreef7directive_argument_desc@@@!q!q@@!@)pdira_loc@@(Locationg!t@@@!r!r @@!@@@A@@@@@!o!s @@@@!@B@7directive_argument_descD;@@+Pdir_string!h@@@@@!v02!v0I@@!@(Pdir_int!i@@@!Ġ!j@@@@@@@@!wJL!wJn@@!@*Pdir_ident)Longidentk!t@@@@@" xoq"xo@@" @)Pdir_booll@@@@@"y"y@@"@@@A@@@@@" u@@@@"@B@@3 (Abstract syntax tree produced by parsing@# (Warning:@ ' this module is unstable and part of -Compiler_libs@-compiler-libs@!.@@@@@@@@@@@@A"=#2Parsetree.constant@@"P@@"O@"@@@"?@@A@@"5!@@#7Parsetree.constant_desc@@"0"/")@@3:Integer constants such as !3! "3l! "3L! "3n!.@/ Suffixes *[g-z][G-Z] 2 are accepted by the parser. Suffixes except #'l'", #'L'% and #'n' are rejected by the typechecker@@@@@@@@@@@@"Q"P@@32Character such as #'c'!.@@@@@@@@@@@@"R"Q"L"D@@38Constant string such as *"constant". or <{delim|other constant|delim}!.@ J The location span the content of the string, without the delimiters.@@@@@@@@@@@@"K"J"E@@37Float constant such as #3.4", #2e5$ or &1.4e-4!.@/ Suffixes #g-z#G-Z K are accepted by the parser. Suffixes are rejected by the typechecker.@@@@@@@@@@@@@A@@@#8Parsetree.location_stack@@@A"Z@"M"L@@A@0Extension points@@#3Parsetree.attribute33Attributes such as )[@id ARG]% and *[@@id ARG]!.@ o Metadata containers passed around within the AST. The compiler ignores unknown attributes.@@@@@@@@@@@@@"e@@"d@"Q@@"P@"C@@"B@@A@@"8@@#3Parsetree.extension39Extension points such as 8[%id ARG] and [%%id ARG]!.@ B Sub-language placeholder -- rejected by the typechecker.@@@@@@@@@@@@@@A"E@@#4Parsetree.attributes@@@A"'@!@#1Parsetree.payload@@""@@@""@@3%: SIG & in an attribute or an extension point@@@@@@@@@@@@""@@3#: T & in an attribute or an extension point@@@@@@@@@@@@!!!@@3#? P& or *? P when E ', in an attribute or an extension point@@@@@@@@@@@@@A@@Z@A@-Core language@@B@0Type expressions@@#3Parsetree.core_type@@!@@!@!@@!@!@@!@!@@!Ґ31... [@id1] [@id2]@@@@@@@@@@@@@A@@}@#8Parsetree.core_type_desc@@!ȑ@@3!_@@@@@@@@@@@@!ȑ!@@38A type variable such as "'a@@@@@@@@@@@@!Ƒ!Š!!@@37Ptyp_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@!.@@@@@@@@@@@@@@!!@@3.Ptyp_tuple(tl); represents a product type:-T1 * ... * Tn4 when "tl$ is ;(None, T1); ...; (None, Tn)@3L1:T1 * ... * Ln:Tn4 when "tl$ is !(Some L1, T1); ...; (Some Ln, Tn)@-A mix, e.g., *L1:T1 * T24 when "tl$ is 9(Some L1, T1); (None, T2)@@7 Invariant: &n >= 2!.@@@@@@@@@@@@""" @@36Ptyp_constr(lident, l), represents:'tconstr4 when $l=[]!,@)T tconstr2 when %l=[T]!,@5(T1, ..., Tn) tconstr& when 1l=[T1 ; ... ; Tn]!.@@@@@@@@@@@@@@"("'"@@3 (Ptyp_object([ l1:T1; ...; ln:Tn ], flag), represents:5< l1:T1; ...; ln:Tn >* when $flag + is ;Asttypes.closed_flag.Closed@&Closed@!,@9< l1:T1; ...; ln:Tn; .. >& when $flag / is 9Asttypes.closed_flag.Open@$Open@!.@@@@@@@@@@@@@@"E"D"3@@36Ptyp_class(tconstr, l), represents:(#tconstr4 when $l=[]!,@*T #tconstr2 when %l=[T]!,@6(T1, ..., Tn) #tconstr& when 1l=[T1 ; ... ; Tn]!.@@@@@@@@@@@@@@"R"Q"I@@3'T as 'a!.@@@@@@@@@@@@"?">"0"(@@3 #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 9Asttypes.closed_flag.Open@$Open@=, and &labels$ is $None!,@*[< `A|`B ]< when $flag& is ;Asttypes.closed_flag.Closed@&Closed@=, and &labels$ is 'Some []!,@2[< `A|`B > `X `Y ]< when $flag& is ;Asttypes.closed_flag.Closed@&Closed@=, and &labels$ is .Some ["X";"Y"]!.@@@@@@@@@@@@@@"""@@3.'a1 ... 'an. T@ 5 Can only appear in the following context:@'As the =E@0 of a  &Parsetree.pattern_desc.Ppat_constraintK/Ppat_constraint@ O node corresponding to a constraint on a let-binding: >let x : 'a1 ... 'an. T = e ...@@&Under  &Parsetree.class_field_kind.Cfk_virtualK+Cfk_virtual@ $ for methods (not values).@@'As the hE@1 of a  +Parsetree.class_type_field_desc.Pctf_methodK+Pctf_method@& node.@@'As the E@& of a  #Parsetree.expression_desc.Pexp_polyK)Pexp_poly@1 node.@@'As the  $Parsetree.label_declaration.pld_typeJ(pld_type@7 field of a ;Parsetree.label_declarationE@!.@@%As a E@& of a  $Parsetree.core_type_desc.Ptyp_objectK+Ptyp_object@1 node.@@'As the  %Parsetree.value_description.pval_typeJ)pval_type@7 field of a ;Parsetree.value_descriptionE@!.@@@@@@@@@@@@@@#0#/@@3*(module S)!.@@@@@@@@@@@@#+#*#@@3%M.(T)@@@@@@@@@@@@##@@3%[%id]!.@@@@@@@@@@@@@A@@g@#6Parsetree.package_type3#As  E@. typed values:<{ppt_path: S; ppt_cstrs: []}, represents *(module S)!,@ 5{ppt_path: S; ppt_cstrs: [(t1, T1) ; ... ; (tn, Tn)]}6 represents 0(module S with type t1 = T1 and ... and tn = Tn)!.@@@@@@@@@@@@@@@#3@@#2@#@@#@"@@"@"@@"@@A@@@#3Parsetree.row_field@@"@@"@"@@"@"@@"@@A@@@#8Parsetree.row_field_desc@@""""@@3.Rtag(`A, b, l), represents:"`A8 when !b$ is $true& and !l$ is "[]!,@'`A of T3 when !b$ is %false% and !l$ is #[T]!,@2`A of T1 & .. & Tn( when !b$ is %false% and !l$ is *[T1;...Tn]!,@4`A of & T1 & .. & Tn& when !b$ is $true& and !l$ is *[T1;...Tn]!.@@$The $bool N 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)@@@@@@@@@@@@@@##@@3'[ | t ]@@@@@@@@@@@@@A@@\@#6Parsetree.object_field@@# @@# @"@@"@"@@"@@A@@i@#;Parsetree.object_field_desc@@"ݑ"ܠ"@@@""@@@@A@@y@B@(Patterns@@#1Parsetree.pattern@@"@@"@"@@"@"@@"@"@@"31... [@id1] [@id2]@@@@@@@@@@@@@A@@@#6Parsetree.pattern_desc@@"@@3,The pattern !_!.@@@@@@@@@@@@""@@3;A variable pattern such as !x@@@@@@@@@@@@"{"z"r@@39An alias pattern such as 'P as 'a@@@@@@@@@@@@"h"g@@31Patterns such as !1", #'a'", &"true"", #1.0", "1l", "1L", "1n@@@@@@@@@@@@"""~@@31Patterns such as ('a'..'z'!.@ m Other forms of interval are recognized by the parser but rejected by the type-checker.@@@@@@@@@@@@"""b@@36Ppat_tuple(pl, Closed)+ represents-(P1, ..., Pn)4 when "pl$ is ;(None, P1); ...; (None, Pn)@5(~L1:P1, ..., ~Ln:Pn)4 when "pl$ is !(Some L1, P1); ...; (Some Ln, Pn)@,A mix, e.g. ,(~L1:P1, P2)4 when "pl$ is 9(Some L1, P1); (None, P2)@@+ 4Ppat_tuple(pl, Open) H is similar, but indicates the pattern additionally ends in a "..!.@5 Invariant:+If Closed, &n >= 2!.@)If Open, &n >= 1!.@@@@@@@@@@@@@@"""@@37Ppat_construct(C, args), represents:!C4 when $args$ is $None!,@#C P2 when $args$ is ,Some ([], P)@/C (P1, ..., Pn)& when $args / is #Some ([], Ppat_tuple [P1; ...; Pn])@.C (type a b) P' when $args$ is 0Some ([a; b], P)@@@@@@@@@@@@@@"̑"ˠ"@@35Ppat_variant(`A, pat), represents:"`A( when #pat$ is $None!,@$`A P& when #pat$ is &Some P@@@@@@@@@@@@@@"ߑ"ޠ"@@3 .Ppat_record([(l1, P1) ; ... ; (ln, Pn)], flag), represents:5{ l1=P1; ...; ln=Pn }7 when $flag$ is ;Asttypes.closed_flag.Closed@&Closed@@7{ l1=P1; ...; ln=Pn; _}7 when $flag$ is 9Asttypes.closed_flag.Open@$Open@@@7 Invariant: %n > 0@@@@@@@@@@@@"呠"@@3(Pattern 1[| P1; ...; Pn |]@@@@@@@@@@@@"ڑ"٠"@@3(Pattern 'P1 | P2@@@@@@@@@@@@"͑"̠"@@3(Pattern '(P : T)@@@@@@@@@@@@""@@3(Pattern '#tconst@@@@@@@@@@@@""@@3(Pattern &lazy P@@@@@@@@@@@@""@@3.Ppat_unpack(s), represents:*(module P)& when !s$ is (Some "P"@*(module _)& when !s$ is $None@@2 Note: .(module P : S)> is represented as 6Ppat_constraint(Ppat_unpack(Some "P"), Ptyp_package S)@@@@@@@@@@@@"ˑ"@@3(Pattern +exception P@@@@@@@@@@@@"Ƒ"Š"@@@""@@3(Pattern %[%id]@@@@@@@@@@@@"""@@3(Pattern %M.(P)@@@@@@@@@@@@@A@@@B@1Value expressions@@#4Parsetree.expression@@"@@"@"@@"@"~@@"}@"p@@"o31... [@id1] [@id2]@@@@@@@@@@@@@A@@@#9Parsetree.expression_desc@@"e"d@@34Identifiers such as !x% and #M.x@@@@@@@@@@@@"]"\@@3=Expressions constant such as !1", #'a'", &"true"", #1.0", "1l., "1L", "1n@@@@@@@@@@@@"|"{"s"e@@3 ,Pexp_let(flag, [(P1,E1) ; ... ; (Pn,En)], E), represents: $let P1 = E1 and ... and Pn = EN in E5 when $flag$ is >Asttypes.rec_flag.Nonrecursive@,Nonrecursive@!,@ (let rec P1 = E1 and ... and Pn = EN in E5 when $flag$ is ;Asttypes.rec_flag.Recursive@)Recursive@!.@@@@@@@@@@@@@@""""u@@3 &Pexp_function ([P1; ...; Pn], C, body) * represents any construct involving #fun$ or (function,, including:2fun P1 ... Pn -> E. when 7body = Pfunction_body E@ 3fun P1 ... Pn -> function p1 -> e1 | ... | pm -> em. when 2body = Pfunction_cases [ p1 -> e1; ...; pm -> em ]@@' !C Z represents a type constraint or coercion placed immediately before the arrow, e.g. 9fun P1 ... Pn : ty -> ...& when 9C = Some (Pconstraint ty)!.@ + A function must have parameters: in ?Pexp_function (params, _, body)+, if ¶ms4 does not contain a ,Pparam_val _", $body/ must be 1Pfunction_cases _!.@@@@@@@@@@@@"ʑ"ɠ"@@3 +Pexp_apply(E0, [(l1, E1) ; ... ; (ln, En)])8 represents 4E0 ~l1:E1 ... ~ln:En@- "li6 can be :Asttypes.arg_label.Nolabel@'Nolabel@ ) (non labeled argument), ;Asttypes.arg_label.Labelled@(Labelled@ ' (labelled arguments) or ;Asttypes.arg_label.Optional@(Optional@5 (optional argument).@7 Invariant: %n > 0@@@@@@@@@@@@"ۑ"ڠ"@@3 'match E0 with P1 -> E1 | ... | Pn -> En@@@@@@@@@@@@"ő"Ġ"@@3 %try E0 with P1 -> E1 | ... | Pn -> En@@@@@@@@@@@@""@@3.Pexp_tuple(el)+ represents-(E1, ..., En)4 when "el$ is ;(None, E1); ...; (None, En)@5(~L1:E1, ..., ~Ln:En)4 when "el$ is !(Some L1, E1); ...; (Some Ln, En)@-A mix, e.g., ,(~L1:E1, E2)4 when "el$ is 9(Some L1, E1); (None, E2)@@7 Invariant: &n >= 2@@@@@@@@@@@@"ϑ"Π"@@36Pexp_construct(C, exp), represents:!C4 when #exp$ is $None!,@#C E2 when #exp$ is &Some E!,@/C (E1, ..., En)& when #exp$ is 0@@@@@@@@@@@@"""@@3#E.l@@@@@@@@@@@@"ܑ"۠"Ӡ"@@3*E1.l <- E2@@@@@@@@@@@@""@@31[| E1; ...; En |]@@@@@@@@@@@@""""@@35if E1 then E2 else E3@@@@@@@@@@@@"""@@3&E1; E2@@@@@@@@@@@@"""w@@33while E1 do E2 done@@@@@@@@@@@@"p"o"g"_"W"O@@3 "Pexp_for(i, E1, E2, direction, E3), represents:;for i = E1 to E2 do E3 done7 when )direction$ is Asttypes.direction_flag.Downto@&Downto@@@@@@@@@@@@@@@"u"t"l@@3'(E : T)@@@@@@@@@@@@"e"d"\"O@@37Pexp_coerce(E, from, T)+ represents((E :> T)+ when $from$ is $None!,@-(E : T0 :> T)& when $from$ is 'Some T0!.@@@@@@@@@@@@@@"s"r"j@@3%E # m@@@@@@@@@@@@"Z"Y@@3'new M.c@@@@@@@@@@@@"I"H"7@@3&x <- 2@@@@@@@@@@@@"0"/@@3;{< x1 = E1; ...; xn = En >}@@@@@@@@@@@@" " "@@3+let SI in E@@@@@@@@@@@@!!@@3(assert E!.@2 Note: ,assert false < is treated in a special way by the type-checker.@@@@@@@@@@@@"!@@3&lazy E@@@@@@@@@@@@!!!@@37Used for method bodies.@ @ Can only be used as the expression under  'Parsetree.class_field_kind.Cfk_concreteK,Cfk_concrete@ % for methods (not values).@@@@@@@@@@@@!!@@3.object ... end@@@@@@@@@@@@!ꑠ!!@@31fun (type t) -> E@@@@@@@@@@@@!ԑ!Ӡ!@@3+(module ME)$ or /(module ME : S)!.@@@@@@@@@@@@!ȑ!@@3"- 1let* P = E0 in E1 !let* P0 = E00 and* P1 = E01 in E1@@@@@@@@@@@@@@!ɑ!@@3%[%id]@@@@@@@@@@@@!@@3!.@@@@@@@@@@@@@A@@ @#.Parsetree.case3/Values of type  E@, represents ((P -> E)$ or 0(P when E0 -> E)@@@@@@@@@@@@@!@@!@!@@!@!@@!@@A@@ @#/Parsetree.letop@@!@@!@!@@!@!@@!@@A@@ @#4Parsetree.binding_op@@!o@@!n@![@@!Z@!M@@!L@!?@@!>@@A@@ @#=Parsetree.function_param_desc@@!.!-!%!@@39Pparam_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@@0 Note: If "E09 is provided, only ;Asttypes.arg_label.Optional@(Optional@, is allowed.@@@@@@@@@@@@!!@@30Pparam_newtype x: represents the parameter ((type x)(. !x 5 carries the location of the identifier, whereas the *pparam_loc8 on the enclosing .function_param= node is the location of the ((type x)2 as a whole.@; Multiple parameters ,(type a b c) # are represented as multiple .Pparam_newtype2 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 $loc14 is the location of ,(type a b c) , and the subsequent locs $loc2% and $loc31 are the same as $loc1 ;, except marked as ghost locations. The locations on !a", !b", !c $, correspond to the variables !a", !b&, and !c4 in the source code.@@@@@@@@@@@@@A@@ /@#8Parsetree.function_param@@"@@"@" @@"@@A@@ :@#7Parsetree.function_body33See the comment on  'Parsetree.expression_desc.Pexp_functionK-Pexp_function@!.@@@@@@@@@@@@@" "@@@!!!!@@3#In ?Pfunction_cases (_, loc, attrs) 3, the location extends from the start of the (function l 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.@@@@@@@@@@@@@A@@ t@#9Parsetree.type_constraint@@!푠!@@@!ߑ!ޠ!@@33See the comment on  'Parsetree.expression_desc.Pexp_functionK-Pexp_function@!.@@@@@@@@@@@@@A@@ @B@2Value descriptions@@# d3/Values of type  lE@, represents:(val x: T3, when  %Parsetree.value_description.pval_primJ)pval_prim@$ is "[]@=external x: T = "s1" ... "sn"2 when  %Parsetree.value_description.pval_primJ)pval_prim@$ is .["s1";..."sn"]@@@@@@@@@@@@@@@"@@"@!@@!@!@@!@!@@!ݐ33... [@@id1] [@@id2]@@@@@@@@@@@@!@@!@@A@@ @B@1Type declarations@@#:Parsetree.type_declaration3 DHere are type declarations and their representation, for various  %Parsetree.type_declaration.ptype_kindJ*ptype_kind@0 and  )Parsetree.type_declaration.ptype_manifestJ.ptype_manifest@( values:&type t( when )type_kind$ is  "Parsetree.type_kind.Ptype_abstractK.Ptype_abstract@5, and (manifest% is $None!,@+type t = T04 when )type_kind$ is  "Parsetree.type_kind.Ptype_abstractK.Ptype_abstract@5, and (manifest% is 'Some T0!,@5type t = C of T | ...4 when )type_kind$ is  !Parsetree.type_kind.Ptype_variantK-Ptype_variant@5, and (manifest% is $None!,@:type t = T0 = C of T | ...4 when )type_kind$ is  !Parsetree.type_kind.Ptype_variantK-Ptype_variant@5, and (manifest% is 'Some T0!,@4type t = {l: T; ...}4 when )type_kind$ is  Parsetree.type_kind.Ptype_recordK,Ptype_record@5, and (manifest% is $None!,@:type t = T0 = {l : T; ...}4 when )type_kind$ is  Parsetree.type_kind.Ptype_recordK,Ptype_record@5, and (manifest% is 'Some T0!,@+type t = ..4 when )type_kind$ is >Parsetree.type_kind.Ptype_openK*Ptype_open@5, and (manifest% is $None!.@@@@@@@@@@@@@@@"@@"@"@@"ѐ3.('a1,...'an) t@@@@@@@@@@@@"@@"3 ,... constraint T1=T1' ... constraint Tn=Tn'@@@@@@@@@@@@"@@"@"t@@"s3$for -= private ...@@@@@@@@@@@@"o@@"n3+represents #= T@@@@@@@@@@@@"e@@"d33... [@@id1] [@@id2]@@@@@@@@@@@@"]@@"\@@A@@F@#3Parsetree.type_kind@@"L@@@"F"E@@@"2"1@@39Invariant: non-empty list@@@@@@@@@@@@"$@@@@A@@a@# X3"- 2{ ...; l: T; ... } ! when  'Parsetree.label_declaration.pld_mutableJ+pld_mutable@ ! is ?Asttypes.mutable_flag.Immutable@)Immutable@!,:{ ...; mutable l: T; ... } ! when  'Parsetree.label_declaration.pld_mutableJ+pld_mutable@ ! is =Asttypes.mutable_flag.Mutable@'Mutable@!.@@* Note: !T* can be a  "Parsetree.core_type_desc.Ptyp_polyK)Ptyp_poly@!.@@@@@@@@@@@@@"n@@"m@"Z@@"Y@"L@@"K@">@@"=@"0@@"/33l : T [@id1] [@id2]@@@@@@@@@@@@@A@@@# !Parsetree.constructor_declaration@@"%@@"$@"@@"@!@@!@!@@!@!@@!@!@@!ǐ36C of ... [@id1] [@id2]@@@@@@@@@@@@@A@@@#?Parsetree.constructor_arguments@@!!@@@!!@@3/Values of type +E@ - represents the constructor arguments of:2C of T1 * ... * Tn* when *res = None $, and !args = Pcstr_tuple [T1; ... ; Tn]!,@%C: T07 when -res = Some T0 $, and 5args = Pcstr_tuple []!,@6C: T1 * ... * Tn -> T0& when -res = Some T0 $, and !args = Pcstr_tuple [T1; ... ; Tn]!,@*C of {...}2 when *res = None $, and 9args = Pcstr_record [...]!,@.C: {...} -> T0. when -res = Some T0 $, and 9args = Pcstr_record [...]!.@@@@@@@@@@@@@@@A@@_@#8Parsetree.type_extension3 EDefinition of new extensions constructors for the extensive sum type !t% (-type t += ...").@@@@@@@@@@@@@"@@"@!@@!@!@@!@!@@!@!@@!@!@@!3$... %@@id1! %@@id2@@@@@@@@@@@@@A@@@#?Parsetree.extension_constructor@@!@@!@!@@!@!w@@!v@!i@@!h36C of ... [@id1] [@id2]@@@@@@@@@@@@@A@@@#8Parsetree.type_exception3?Definition of a new exception (+exception E").@@@@@@@@@@@@@!j@@!i@!\@@![@!N@@!M33... [@@id1] [@@id2]@@@@@@@@@@@@@A@@@# $Parsetree.extension_constructor_kind@@!C!B!.!&@@3 &Pext_decl(existentials, c_args, t_opt) < describes a new extension constructor. It can be:2C of T1 * ... * Tn6 when: ,existentials$ is "[]!,@&c_args$ is -[T1; ...; Tn]!,@%t_opt$ is $None@@@%C: T05 when ,existentials$ is "[]!,@&c_args$ is "[]!,@%t_opt$ is 'Some T0!.@@@6C: T1 * ... * Tn -> T05 when ,existentials$ is "[]!,@&c_args$ is -[T1; ...; Tn]!,@%t_opt$ is 'Some T0!.@@@>C: 'a... . T1 * ... * Tn -> T05 when ,existentials$ is (['a;...]!,@&c_args$ is .[T1; ... ; Tn]!,@%t_opt$ is 'Some T0!.@@@@@@@@@@@@@@@@!ܑ!@@3.Pext_rebind(D); re-export the constructor !D3 with the new name !C@@@@@@@@@@@@@A@@@A@.Class language@@B@ 'Type expressions for the class language@@#4Parsetree.class_type@@!@@!@!@@!@!@@!Ɛ31... [@id1] [@id2]@@@@@@@@@@@@@A@@@#9Parsetree.class_type_desc@@!!!@@3"- !c1['a1, ..., 'an] c@@@@@@@@@@@@@@!!@@3.object ... end@@@@@@@@@@@@!!!!@@36Pcty_arrow(lbl, T, CT), represents:'T -> CT; when #lbl$ is :Asttypes.arg_label.Nolabel@'Nolabel@!,@*~l:T -> CT; when #lbl$ is ;Asttypes.arg_label.Labelled@*Labelled l@!,@*?l:T -> CT; when #lbl$ is ;Asttypes.arg_label.Optional@*Optional l@!.@@@@@@@@@@@@@@!Б!@@3#%id@@@@@@@@@@@@!ȑ!Ǡ!@@30let open M in CT@@@@@@@@@@@@@A@@c@#9Parsetree.class_signature3/Values of type /class_signature, represents:8object('selfpat) ... end@.object ... end& when  $Parsetree.class_signature.pcsig_selfJ*pcsig_self@= is  !Parsetree.core_type_desc.Ptyp_anyK(Ptyp_any@@@@@@@@@@@@@@@@!@@!@!@@!@@A@@@#:Parsetree.class_type_field@@!@@!@!@@!@!@@!33... [@@id1] [@@id2]@@@@@@@@@@@@@A@@@#?Parsetree.class_type_field_desc@@!!@@3*inherit CT@@@@@@@@@@@@!!@@3(val x: T@@@@@@@@@@@@![!Z@@3+method x: T@3 Note: !T* can be a  "Parsetree.core_type_desc.Ptyp_polyK)Ptyp_poly@!.@@@@@@@@@@@@!=!<@@32constraint T1 = T2@@@@@@@@@@@@!'!&@@3'[@@@id]@@@@@@@@@@@@!!@@3&[%%id]@@@@@@@@@@@@@A@@@#5Parsetree.class_infos3/Values of type 6class_expr class_infos, represents:-class c = ...@;class ['a1,...,'an] c = ...@5class virtual c = ...@@ 4 They are also used for "class type" declaration.@@@@@@@@@@@@!4Y@!/@@!.@!!@@! @ @@ @ @@ @ @@ @ @@ Ɛ33... [@@id1] [@@id2]@@@@@@@@@@@@@A@@=@#;Parsetree.class_description@@@A @E@# Parsetree.class_type_declaration@@@A @M@B@ (Value expressions for the class language@@#4Parsetree.class_expr@@ @@ @ @@ @ @@ ~31... [@id1] [@id2]@@@@@@@@@@@@@A@@g@#9Parsetree.class_expr_desc@@ t s b@@3!c% and 1['a1, ..., 'an] c@@@@@@@@@@@@ [ Z@@3.object ... end@@@@@@@@@@@@ S R J = 5@@39Pcl_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!,@5fun ?l:(P = E0) -> CE; when #lbl% is ;Asttypes.arg_label.Optional@*Optional l@; and $exp0$ is 'Some E0!.@@@@@@@@@@@@@@   @@3 (Pcl_apply(CE, [(l1,E1) ; ... ; (ln,En)])8 represents 4CE ~l1:E1 ... ~ln:En.. "li 3 can be empty (non labeled argument) or start with !? ! (optional argument).@8 Invariant: %n > 0@@@@@@@@@@@@    @@3 ,Pcl_let(rec, [(P1, E1); ... ; (Pn, En)], CE), represents: %let P1 = E1 and ... and Pn = EN in CE6 when #rec$ is >Asttypes.rec_flag.Nonrecursive@,Nonrecursive@!,@ )let rec P1 = E1 and ... and Pn = EN in CE6 when #rec$ is ;Asttypes.rec_flag.Recursive@)Recursive@!.@@@@@@@@@@@@@@ ̑ ˠ @@3)(CE : CT)@@@@@@@@@@@@  @@3%[%id]@@@@@@@@@@@@   @@30let open M in CE@@@@@@@@@@@@@A@@@#9Parsetree.class_structure3/Values of type  E@, represents:7object(selfpat) ... end@.object ... end& when  $Parsetree.class_structure.pcstr_selfJ*pcstr_self@= is ?Parsetree.pattern_desc.Ppat_anyK(Ppat_any@@@@@@@@@@@@@@@@ @@ @ @@ @@A@@@#5Parsetree.class_field@@ @@ @ @@ @ @@ 33... [@@id1] [@@id2]@@@@@@@@@@@@@A@@@#:Parsetree.class_field_desc@@   y q@@38Pcf_inherit(flag, CE, s), represents:*inherit CE: when $flag$ is @@3&[%%id]@@@@@@@@@@@@@A@@@#:Parsetree.class_field_kind@@!5!4@@@!'!&!@@@@A@@@#;Parsetree.class_declaration@@@A!@@A@/Module language@@B@ (Type expressions for the module language@@#5Parsetree.module_type@@! @@! @ @@ @ @@ 31... [@id1] [@id2]@@@@@@@@@@@@@A@@@#:Parsetree.module_type_desc@@ 㑠 @@3-Pmty_ident(S), represents !S@@@@@@@@@@@@ ؑ @@3+sig ... end@@@@@@@@@@@@ Б Ϡ @@37functor(X : MT1) -> MT2@@@@@@@@@@@@   @@3+MT with ...@@@@@@@@@@@@  @@31module type of ME@@@@@@@@@@@@  @@3%[%id]@@@@@@@@@@@@  @@3*(module M)@@@@@@@@@@@@@A@@,@#;Parsetree.functor_parameter@@ @@3"()@@@@@@@@@@@@   s@@3/Named(name, MT), represents:((X : MT)& when $name$ is &Some X!,@((_ : MT)& when $name$ is $None@@@@@@@@@@@@@@@A@@o@#3Parsetree.signature@@@A @w@#8Parsetree.signature_item@@ @@ @ t@@ s@@A@@@#=Parsetree.signature_item_desc@@ c b@@3"- (val x: T=external x: T = "s1" ... "sn"@@@@@@@@@@@@@@ d c [@@3 #type t1 = ... and ... and tn = ...@@@@@@@@@@@@ N M@@3 $type t1 := ... and ... and tn := ...@@@@@@@@@@@@ @ ?@@3.type t1 += ...@@@@@@@@@@@@ 8 7@@30exception C of T@@@@@@@@@@@@ 0 /@@3,module X = M% and -module X : MT@@@@@@@@@@@@ . -@@3-module X := M@@@@@@@@@@@@ & %@@3 (module rec X1 : MT1 and ... and Xn : MTn@@@@@@@@@@@@  @@32module type S = MT% and -module type S@@@@@@@@@@@@  @@35module type S := ...@@@@@@@@@@@@  @@3&open X@@@@@@@@@@@@  @@3*include MT@@@@@@@@@@@@@@3 #class c1 : ... and ... and cn : ...@@@@@@@@@@@@@@3 *class type ct1 = ... and ... and ctn = ...@@@@@@@@@@@@①@@3'[@@@id]@@@@@@@@@@@@ڑ٠@@3&[%%id]@@@@@@@@@@@@@A@@@@#@@#=Parsetree.include_declaration3/Values of type 3include_declaration, represents *include ME@@@@@@@@@@@@@@A:@@#9Parsetree.with_constraint@@%$@@33with type X.t = ...@ o Note: the last component of the longident must match the name of the type_declaration.@@@@@@@@@@@@@@33with module X.Y = Z@@@@@@@@@@@@@@38with module type X.Y = Z@@@@@@@@@@@@ՑԠ@@3?with module type X.Y := sig end@@@@@@@@@@@@@@3 1with type X.t := ..., same format as [Pwith_type]@@@@@@@@@@@@@@34with module X.Y := Z@@@@@@@@@@@@@A@@@B@ )Value expressions for the module language@@#5Parsetree.module_expr@@@@@x@@w@j@@i31... [@id1] [@id2]@@@@@@@@@@@@@A@@@#:Parsetree.module_expr_desc@@_^@@3!X@@@@@@@@@@@@NM@@3.struct ... end@@@@@@@@@@@@FE=@@36functor(X : MT1) -> ME@@@@@@@@@@@@65-@@3(ME1(ME2)@@@@@@@@@@@@&%@@3%ME1()@@@@@@@@@@@@@@3)(ME : MT)@@@@@@@@@@@@ @@3'(val E)@@@@@@@@@@@@@@3%[%id]@@@@@@@@@@@@@A@@\@#3Parsetree.structure@@@A@d@#8Parsetree.structure_item@@@@@@@@@A@@o@#=Parsetree.structure_item_desc@@̠͑@@3!E@@@@@@@@@@@@@@3 ,Pstr_value(rec, [(P1, E1 ; ... ; (Pn, En))]), represents:?let P1 = E1 and ... and Pn = EN6 when #rec$ is >Asttypes.rec_flag.Nonrecursive@,Nonrecursive@!,@ $let rec P1 = E1 and ... and Pn = EN 6 when #rec$ is ;Asttypes.rec_flag.Recursive@)Recursive@!.@@@@@@@@@@@@@@ڑ@@3"- (val x: T>external x: T = "s1" ... "sn" @@@@@@@@@@@@@@ۑڠ@@3 "type t1 = ... and ... and tn = ...@@@@@@@@@@@@ő@@3.type t1 += ...@@@@@@@@@@@@@@3"- 0exception C of T1exception C = M.X@@@@@@@@@@@@@@@@3-module X = ME@@@@@@@@@@@@@@3 (module rec X1 = ME1 and ... and Xn = MEn@@@@@@@@@@@@@@32module type S = MT@@@@@@@@@@@@@@3&open X@@@@@@@@@@@@@@3 #class c1 = ... and ... and cn = ...@@@@@@@@@@@@@@3 *class type ct1 = ... and ... and ctn = ...@@@@@@@@@@@@|{@@3*include ME@@@@@@@@@@@@ts@@3'[@@@id]@@@@@@@@@@@@lkc@@3&[%%id]@@@@@@@@@@@@@A@@U@#:Parsetree.value_constraint@@ZX@@W@>@@=@@@@,*@@)@@@@@@3"- 2Pvc_constraint { locally_abstract_univars=[]; typ} : is a simple type constraint on a value binding: , let x : typ3More generally, in /Pvc_constraint { locally_abstract_univars; typ}( 8locally_abstract_univars : is the list of locally abstract type variables in 9 let x: type a ... . typ @ &Pvc_coercion { ground=None; coercion }, represents ,let x :> typ@ (Pvc_coercion { ground=Some g; coercion }, represents 0let x : g :> typ@@@@@@@@@@@@@@@A@@@#7Parsetree.value_binding3?let pat : type_constraint = exp@@@@@@@@@@@@@A@@@@3@@2@%@@$@@@@@@@@A@@@#8Parsetree.module_binding3/Values of type .module_binding, represents -module X = ME@@@@@@@@@@@@@@@@@@@@@@@@@@A@@@A@(Toplevel@@B@0Toplevel phrases@@#9Parsetree.toplevel_phrase@@ʑ@@@@@3$#use", %#load$ ...@@@@@@@@@@@@@A@@@@#Q@@A)Longident(Location(Asttypes@@@@@