Caml1999I031v^[)Parsetree(constant8@@.Pconst_integer&stringO@@@&optionJ$charB@@@@@@@@5parsing/parsetree.mliZZ @@&A+Pconst_char@@@@@``@@4B-Pconst_string-@@@(Location!t@@@4?@@@@@@@@0a1a<@@UC,Pconst_floatXN@@@LJ@@@@@@@@HgIg@@mD@@A@@@@@LY@@@@p@A@.location_stack8@@@A$listI=!t@@@@@@@@@@bncn@@@@EA@)attribute8@@)attr_name@(Asttypes#loc@@@@@@}s~s*@@H,attr_payload@'payload@@@t+/t+F@@I(attr_loc@u!t@@@uGKuGa@@J@@A@@@@@rvbe@@@@FA@)extension8@@@A:#loc@@@@@@0@@@@@@@@@}  }  =@@@@GB@*attributes8@@@Ama@@@@@@@@@@C  C  @@@@HB@I8@@$PStr)structure@@@@@F  F  @@K$PSig)signature@@@@@G  G  @@L$PTyp)core_type@@@@@H U WH U j@@$M$PPat'pattern@@@*expression@@@@@@@@I  I  @@@N@@A@@@@@E  @@@@CIB@(8@@)ptyp_desc@.core_type_desc@@@0Q ` e1Q ` @@UO(ptyp_loc@!t@@@>R  ?R  @@cP.ptyp_loc_stack@@@@JS  KS  @@oQ/ptyp_attributes@@@@VT  WT  @@{R@@A@@@@@ZO J J[U  @@@@JB@38@@(Ptyp_any@@gX  hX  (@@S(Ptyp_var@@@@@uY 5 7vY 5 K@@T*Ptyp_arrow)arg_label@@@֠@@@ՠ@@@@@Z q sZ q @@U*Ptyp_tupleA@@@@@@@@cPRcPp@@V+Ptyp_constr8#loc)Longident!t@@@@@@Ѡb@@@@@@@@ii-@@W+Ptyp_objectt,object_field@@@@@@͠e+closed_flag@@@@@ooB@@X*Ptyp_classt#loc"e"g?"e"@@cs,Ppat_variant͐%label@@@ [I@@@ @@@ @@V$#$%W$#$M@@{t+Ppat_recordΐ #loc!t@@@@@@k@@@@@ @@@  +closed_flag@@@@@~$$$% @@u*Ppat_arrayϐ3@@@@@@@@&o&q&o&@@v'Ppat_orА@@@@@@@@&&&&@@w/Ppat_constraintѐ@@@@@@@@&&&'@@x)Ppat_typeҐL#loc!t@@@@@@@@'2'4'2'R@@y)Ppat_lazyӐ@@@@@'m'o'm'@@z+Ppat_unpackԐo#loc@@@@@@@@@@@''''@@{.Ppat_exceptionՐ@@@@@((((@@ |.Ppat_extension֐@@@@@) ) ) )+@@-})Ppat_openא#locj!t@@@@@@@@@@@")D)F#)D)n@@G~@@A@@@@@&@@@@JRB@8@@)pexp_desc@/expression_desc@@@#7))8))@@\(pexp_loc@!!t@@@"E))F))@@j.pexp_loc_stack@@@@!P))Q)*@@u/pexp_attributes@@@@ [**#\**?@@@@A@@@@@_))`*^*c@@@@SB@18@@*Pexp_identܐ#loc!t@@@@@@@@y*{*}z*{*@@-Pexp_constantݐ@@@@@!**!**@@(Pexp_letސ (rec_flag@@@A-value_binding@@@@@@@@@@@$+W+Y$+W+@@-Pexp_functionߐZ$case@@@@@@@@+,,+,- @@(Pexp_funT)arg_label@@@נ@@@@@@@@@~@@@}@@,-9-;,-9-}@@*Pexp_applyᐠ@@@|)arg_label@@@y@@@x@@z@@@{@@C11C11@@*Pexp_match␠@@@wX@@@u@@@v@@N3_3aN3_3@@4(Pexp_try㐠@@@tȠn@@@r@@@s@@%P33&P33@@J*Pexp_tuple䐠ڠ@@@p@@@q@@7R448R44<@@\.Pexp_construct吠#loc!t@@@n@@@o[>@@@l@@@m@@VW44WW44@@{,Pexp_variant搠%label@@@ksV@@@i@@@j@@n]55o]55@@+Pexp_record琠##loc!t@@@e@@@fx@@@d@@g@@@h@@@b@@@c@@b6w6yb6w6@@*Pexp_field萠@@@a7#loc!t@@@_@@@`@@i77i77@@-Pexp_setfield鐠@@@^Q#loc!t@@@\@@@]@@@[@@j77j787@@*Pexp_arrayꐠ@@@Y@@@Z@@l8R8Tl8R8s@@/Pexp_ifthenelse될@@@X@@@W@@@U@@@V@@m88m88@@"-Pexp_sequence쐠@@@T@@@S@@o88o89$@@3*Pexp_while퐠@@@R@@@Q@@p9698 p969_@@D(Pexp_for @@@P@@@O@@@N.direction_flag@@@M'@@@L@@>q9~9?q9~9@@c/Pexp_constraint4@@@KS@@@J@@Ox;;Px;;<@@t+Pexp_coerceE@@@Ijh@@@G@@@Hm@@@F@@iy;O;Qjy;O;@@)Pexp_send_@@@E#loc %label@@@C@@@D@@~<4<6~<4<[@@(Pexp_new#loc!t@@@A@@@B@@@@<<<<@@-Pexp_overridefR#locW%label@@@:@@@;@@@9@@<@@@=@@<<<=@@.Pexp_letmodulel#loc@@@6@@@7@@@8+module_expr@@@5@@@4@@=;===;=}@@1Pexp_letexception5extension_constructor@@@3@@@2@@ == ==@@/+Pexp_assert@@@1@@>>>>!@@<)Pexp_lazy @@@0@@$>>%>>@@I)Pexp_poly@@@/?=@@@-@@@.@@:>>;>>@@_+Pexp_object/class_structure@@@,@@J??K??@@o,Pexp_newtype#locm@@@*@@@+K@@@)@@b??c?@@@)Pexp_pack@@@(@@o@3@5p@3@O@@)Pexp_open0open_declaration @@@'l@@@&@@@@@A@@*Pexp_letop%letop@@@%@@A^A`A^Au@@.Pexp_extension0@@@$@@AAAA@@0Pexp_unreachable@@AAAB@@@@A@@@@@*e*e@@@@TB@8@@&pc_lhs@@@@B.B3B.BC@@(pc_guard@Р@@@@@@BDBIBDBe@@&pc_rhs@@@@BfBkBfB~@@@@A@@@@@BBBB@@@@UB@P8@@$let_@*binding_op@@@BBBB@@ $ands@@@@@@@BBBC@@ !$body@@@@ CC CC(@@ ,@@A@@@@@ BB C)C,@@@@ 0VB@(8@@'pbop_op@#loc 0@@@@@@ !CCCG "CCC\@@ F(pbop_pat@ @@@ ,C]Ca -C]Ct@@ Q(pbop_exp @ @@@ 7CuCy 8CuC@@ \(pbop_loc @ !!t@@@ ECC FCC@@ j@@A@@@@@ IC.C. JCC@@@@ nWB@1value_description8@@)pval_name @#loc p@@@@@@ aCC bCD@@ )pval_type @p@@@ lD D mD D#@@ )pval_prim @  @@@@@@ }D$D) ~D$D@@@ /pval_attributes@3@@@ DADF DADb@@ (pval_loc@ r!t@@@ DD DD@@ @@A@@@@@ CC DD@@@@ XB@0type_declaration8@@*ptype_name@ 8#loc @@@@@@ EE EF@@ ,ptype_params@ e@@@ X(variance@@@ ^+injectivity@@@@@@@@@@ FF  FFC@@ +ptype_cstrs@ @@@@@@ !t@@@@@@@@ FbFg FbF@@ *ptype_kind@)type_kind@@@ FF FF@@ %-ptype_private@ ,private_flag@@@ FF FG@@ 2.ptype_manifest@ " @@@@@@ G5G: G5G[@@ B0ptype_attributes@@@@ (GuGz )GuG@@ M)ptype_loc@ !t@@@ 6GG 7GG@@ [@@A@@@@@ :EE ;GG@@@@ _YB@C8@@.Ptype_abstract@@ GLL HLL@@ l-Ptype_variant 7constructor_declaration@@@@@@@@ \LL ]LL@@ ,Ptype_record 1label_declaration@@@@@@@@ qLL rLM @@ *Ptype_open@@ zM/M1 {M/M=@@ @@A@@@@@ ~LL@@@@ ZB@8@@(pld_name@ #loc @@@@@@ M]Mb M]Mw@@ à+pld_mutable@ +,mutable_flag@@@ MxM} MxM@@ Ġ(pld_type@ @@@ MM MM@@ Š'pld_loc@ !t@@@ MM MM@@ Ơ.pld_attributes @ o@@@ MM MM@@ @@A@@@@@ M?M? N N@@@@ [B@v8@@(pcd_name!@ d#loc @@@@@@Ű OO OP@@ Ƞ(pcd_vars"@  z#loc @@@@@@@@@ð PP PP4@@ ɠ(pcd_args#@5constructor_arguments@@@ P5P: P5PZ@@ (ʠ'pcd_res$@  @@@@@@ P[P` P[Pz@@ 8ˠ'pcd_loc%@ !t@@@ !P{P "P{P@@ F̠.pcd_attributes&@ @@@ ,PP -PP@@ Q@@A@@@@@ 0OO 1PP@@@@ U\B@68@@+Pcstr_tuple'  I@@@@@@@@ FPP GPQ@@ kΠ,Pcstr_record( @@@@@@@@ XQQ  YQQH@@ }@@A@@@@@ \PP@@@@ ]B@.type_extension8@@+ptyext_path)@ #loc !t@@@@@@ְ u+T T v+T T+@@ Р-ptyext_params*@ ( @@@Ҡ (variance@@@Р !+injectivity@@@@@@@@@@԰ ,T,T1 ,T,Tl@@ Ѡ3ptyext_constructors+@ J@@@@@@ΰ -TmTr -TmT@@ Ҡ.ptyext_private,@ ?,private_flag@@@̰ .TT .TT@@ Ӡ*ptyext_loc-@ !t@@@˰ /TT /TT@@ Ԡ1ptyext_attributes.@ x@@@ʰ 0TT 0TU@@ @@A@@@@@ )SS 1U'U,@@@@ ^B@8@@)pext_name/@ m#loc @@@@@@۰ 9UU 9UU@@ ֠)pext_kind0@:extension_constructor_kind@@@ٰ :UU :UV@@ נ(pext_loc1@ !t@@@ذ ;VV ;VV@@ (ؠ/pext_attributes2@ @@@װ <VV! <VV=@@ 3@@A@@@@@ 7UU =VaVe@@@@ 7_B@.type_exception8@@2ptyexn_constructor3@ @@@ް #AVV $AVV@@ Hڠ*ptyexn_loc4@ !t@@@ݰ 1BVV 2BVV@@ V۠1ptyexn_attributes5@ @@@ܰ <CVV =CVV@@ a@@A@@@@@ @?VgVg ADWW@@@@ e`B@T8@@)Pext_decl6  #loc k@@@@@@@@@a@@@ o m@@@@@@@@ jHWoWq kHWoW@@ ݠ+Pext_rebind7 #loc !t@@@@@@@@ \[ [ \[ [/@@ @@A@@@@@ GWNWN@@@@ aB@*class_type8@@)pcty_desc8@/class_type_desc@@@ d[[ d[\@@ ߠ(pcty_loc9@ !t@@@ e\\  e\\@@ /pcty_attributes:@ [@@@ f\ \% f\ \A@@ @@A@@@@@ b[[ g\`\e@@@@ bB@&8@@+Pcty_constr; R#loc !t@@@@@@ z @@@@@@@@ j\}\ j\}\@@ .Pcty_signature @@@@@ w^^ w^^@@ 1)Pcty_open?0open_description @@@"@@@@@ x__ !x__.@@ E@@A@@@@@ $i\g\g@@@@ HcB@E8@@*pcsig_self@@ 6@@@ 2|_g_l 3|_g_@@ W,pcsig_fieldsA@ 0class_type_field@@@@@@ E}__ F}__@@ j@@A@@@@@ Iz_K_K J~__@@@@ ndB@8@@)pctf_descB@5class_type_field_desc@@@ [`` \``@@ (pctf_locC@ E!t@@@ i`` j``@@ /pctf_attributesD@ @@@ t`` u`a@@ @@A@@@@@ x`` ya7a<@@@@ eB@&8@@,Pctf_inheritE@@@ @@ aZa\ aZax@@ (Pctf_valF &#loc +%label@@@ @@@  2,mutable_flag@@@ 8,virtual_flag@@@ @@@@@ @@ aa aa@@ +Pctf_methodG N#loc S%label@@@@@@ Z,private_flag@@@ `,virtual_flag@@@ @@@@@@@ aa ab4@@ /Pctf_constraintH @@@ @@@@@@@ bb bb@@.Pctf_attributeI 1@@@@@ bb bc @@.Pctf_extensionJ @@@@@c#c%c#cB@@,@@A@@@@@ a>a>@@@@/fB@+class_infos8!a@@A(pci_virtK@ ,virtual_flag@@@"cpcu#cpc@@G*pci_paramsL@ ՠ 8@@@ (variance@@@ +injectivity@@@@@@@@@@DccEcc@@i(pci_nameM@ #loce@@@@@@VccWcc@@{(pci_exprN@J^cc_cc@@'pci_locO@H!t@@@lccmcd@@.pci_attributesP@ "@@@ wddxdd3@@@@A@Y@@@@@}cUcU~dVd[@@@@gB@1class_description8@@@Az@@@@@@@@@@e%e%e%eS@@@@hB@6class_type_declaration8@@@A@@@@@@@@@@eUeUeUe@@@@iB@*class_expr8@@(pcl_descQ@/class_expr_desc@@@eeee@@'pcl_locR@!t@@@eeef@@.pcl_attributesS@ x@@@ffff0@@@@A@@@@@eefOfT@@@@jB@&8@@*Pcl_constrTo#loc 7!t@@@6@@@7 @@@4@@@5@@flfnflf@@-Pcl_structureU@@@3@@ffff@@&'Pcl_funV)arg_label@@@2@@@0@@@1@@@/{@@@.@@"gg#ggI@@G)Pcl_applyW@@@-۠)arg_label@@@*)@@@)@@+@@@,@@AiiBij5@@f'Pcl_letX(rec_flag@@@( @@@&@@@'<@@@%@@]k-k/^k-kf@@.Pcl_constraintYI@@@$p@@@#@@nlloll@@-Pcl_extensionZ @@@"@@{mm|mm#@@(Pcl_open[o@@@!k@@@ @@m4m6m4ma@@@@A@@@@@fVfV@@@@kB@N8@@*pcstr_self\@@@@:mmmm@@,pcstr_fields]@Q+class_field@@@8@@@9mmmm@@@@A@@@@@m~m~mm@@@@lB@8@@(pcf_desc^@0class_field_desc@@@=nnnn@@'pcf_loc_@!t@@@<nnno@@.pcf_attributes`@@@@;oooo1@@@@A@@@@@nnoToY@@@@ mB@&8@@+Pcf_inherita-override_flag@@@R@@@Q #loc@@@N@@@O@@@P@@ orot oro@@0'Pcf_valb#loc%label@@@K@@@L,mutable_flag@@@J0class_field_kind@@@I@@M@@0r;r=1r;rw@@U *Pcf_methodc#loc%label@@@F@@@G,private_flag@@@E%@@@D@@H@@RusuuSusu@@w .Pcf_constraintdf@@@Bj@@@A@@C@@fvvgvv@@ /Pcf_initializere\@@@@@@svvtvw@@ -Pcf_attributef@@@?@@wwww;@@ -Pcf_extensiong@@@>@@wQwSwQwo@@@@A@@@@@o[o[@@@@nB@i8@@+Cfk_virtualh@@@U@@wwww@@,Cfk_concretei;-override_flag@@@T@@@S@@wwww@@@@A@@@@@ww@@@@oB@1class_declaration8@@@A:@@@V@@@W@@@@wwwx@@@@pB@+module_type8@@)pmty_descj@0module_type_desc@@@Z$x~x$x~x@@(pmty_lock@!t@@@Y%xx%xx@@/pmty_attributesl@@@@X&xx&xx@@@@A@@@@@"xfxf'xy@@@@qB@&8@@*Pmty_identm#loc_!t@@@e@@@f@@*yy*yy:@@8.Pmty_signaturen4@@@d@@ +ybyd!+yby@@E,Pmty_functoro1functor_parameter@@@cf@@@b@@5,yy6,yy@@Z)Pmty_withp@@@a/with_constraint@@@_@@@`@@N.yyO.yz&@@s+Pmty_typeofq l@@@^@@[/z=z?\/z=z[@@.Pmty_extensionr@@@]@@h0zxzzi0zxz@@*Pmty_aliass#loc!t@@@[@@@\@@~1zz1zz@@@@A@@@@@)yy@@@@rB@Z8@@$Unitt@@4zz4z{@@%Namedu(#loc@@@h@@@i@@@jw@@@g@@5{{5{{:@@@@A@@@@@3zz@@@@sB@8@@@Aa.signature_item@@@k@@@l@@@@:{{:{{@@@@tB@ 8@@)psig_descv@3signature_item_desc@@@n>|| >||,@@(psig_locw@!t@@@m?|-|2?|-|G@@@@A@@@@@<{{@|H|M@@@@ uB@8@@*Psig_valuex@@@@@C|i|kC|i|@@)Psig_typey(rec_flag@@@n@@@@@@@@G||G|}@@5 .Psig_typesubstzŠ@@@@@@@@"I}C}E#I}C}n@@G!+Psig_typext{@@@@@0K}}1K}}@@U".Psig_exception|%@@@~@@>L}}?L}~@@c#+Psig_module}2module_declaration@@@}@@NM~~!OM~~D@@s$-Psig_modsubst~3module_substitution@@@|@@^N~p~r_N~p~@@%.Psig_recmodule$@@@z@@@{@@pO~~qO~~@@&,Psig_modtype7module_type_declaration@@@y@@QQB@@'1Psig_modtypesubst@@@x@@Sy{Sy@@()Psig_open@@@w@@UU@@),Psig_include3include_description @@@v@@VV*@@**Psig_class_8@@@t@@@u@@W@BW@h@@+/Psig_class_typer9@@@r@@@s@@YY@@,.Psig_attribute@@@q@@[  [ (@@-.Psig_extensionz@@@p@@@o@@\>@\>j@@.@@A@@@@@B|O|O@@@@vB@8@@(pmd_name@#loc@@@@@@@@@ ` `@@1/(pmd_type@@@@aa@@<0.pmd_attributes@@@@"b#b@@G1'pmd_loc@ !t@@@0c"1c6@@U2@@A@@@@@4^}}5d7<@@@@YwB@8@@(pms_name@#locY@@@@@@JiKi@@o3,pms_manifest@#loc!t@@@@@@^j_j@@4.pms_attributes@@@@ikjk@@5'pms_loc@S!t@@@wl$xl8@@6@@A@@@@@{g}}|m9>@@@@xB@8@@)pmtd_name@#loc@@@@@@rr@@7)pmtd_type@l@@@@@@ss@@8/pmtd_attributes@W@@@tt@@9(pmtd_loc@!t@@@u(-u(B@@:@@A@@@@@pvCH@@@@yB@*open_infos 8!a@@A*popen_expr@ %*%9@@;.popen_override@i-override_flag@@@:?:]@@<)popen_loc@!t@@@^c^y@@=0popen_attributes@@@@zz@@>@@A@Y@@@@@}  @@@@"zB@8@@@AD#loca!t@@@@@@@@@@@@@H@@@@;{B@ 8@@@A 5@@@@@@@@@@%&@@@@J|B@-include_infos 8!a@@A)pincl_mod@ 8fk9fy@@]?)pincl_loc@"!t@@@FzGz@@k@0pincl_attributes@@@@QR@@vA@@A@Y@@@@@WIIX@@@@|}B@8@@@A72@@@@@@@@@@gh@@@@~B@3include_declaration8@@@A @@@@@@@@@@x99y9l@@@@B@48@@*Pwith_type#loc!t@@@@@@@@@@@@@B,Pwith_module0#loc!t@@@@@@=#loc!t@@@@@@@@@@C-Pwith_modtypeS#loc!t@@@@@@@@@@@@@D2Pwith_modtypesubstm#loc5!t@@@@@@@@@@@DFD{@@E/Pwith_typesubst#locO!t@@@@@@@@@@@@@,F.Pwith_modsubst#loci!t@@@@@@#locv!t@@@@@@@@*&(+&]@@OG@@A@@@@@.@@@@R@B@ D8@@)pmod_desc@0module_expr_desc@@@?@@@dH(pmod_loc@)!t@@@MN @@rI/pmod_attributes@@@@XY/@@}J@@A@@@@@\]NS@@@@AB@&8@@*Pmod_ident#loc!t@@@@@@@@vlnwl@@K.Pmod_structure@@@@@@@L,Pmod_functorc@@@Ơ @@@@@@@M*Pmod_apply @@@Ġ @@@@@-/-X@@N/Pmod_constraint @@@ @@@@@lnl@@O+Pmod_unpack@@@@@@@P.Pmod_extension`@@@@@@@Q@@A@@@@@UU@@@@BB@8@@@A.structure_item@@@@@@@@@@5@@@@ CB@ 8@@)pstr_desc@3structure_item_desc@@@ͰRWRv@@R(pstr_loc@!t@@@̰w|w@@+S@@A@@@@@ 77 @@@@/DB@8@@)Pstr_eval@@@@@@@@ @@DT*Pstr_value(rec_flag@@@ڠ@@@@@@@@78@@\U.Pstr_primitiveN@@@@@DikEi@@iV)Pstr_type(rec_flag@@@ߠM@@@@@@@@\] @@W+Pstr_typext:@@@@@i=?j=^@@X.Pstr_exception9@@@@@vxzwx@@Y+Pstr_module.module_binding@@@@@@@Z.Pstr_recmodule;@@@@@@@@D@@[,Pstr_modtype(@@@@@}}@@\)Pstr_open6@@@@@@@]*Pstr_classg@@@@@@@@!@@^/Pstr_class_typez@@@@@@@@UWU@@_,Pstr_includew@@@@@@@ `.Pstr_attribute)@@@@@@@a.Pstr_extension@@@Ϡ@@@@@464`@@(b@@A@@@@@@@@@+EB@o8@@'pvb_pat@ @@@@@:c(pvb_expr@ @@@ !@@Ed.pvb_attributes@@@@+,@@Pe'pvb_loc@!t@@@9:@@^f@@A@@@@@=ss>@@@@bFB@8@@(pmb_name@#loc[f@@@@@@@@@XY5@@}g(pmb_expr@t@@@c6;d6Q@@h.pmb_attributes@@@@nRWoRr@@i'pmb_loc@X!t@@@|sx}s@@j@@A@@@@@@@@@GB@/toplevel_phrase8@@(Ptop_defȐ@@@@@!8@@o(Ptop_dirɐ2toplevel_directive@@@@@9;9[@@p@@A@@@@@@@@@kA@ 8@@)pdir_name@B#loc@@@@@@  @@q(pdir_arg@Ѡ2directive_argument@@@@@@  @@r(pdir_loc@!t@@@  @@s@@A@@@@@yy @@@@lB@8@@*pdira_desc@7directive_argument_desc@@@>@@t)pdira_loc@!t@@@?C?Y@@&u@@A@@@@@Z]@@@@*mB@8@@+Pdir_stringϐ'@@@@@}}@@<v(Pdir_intА5@@@31@@@@@@@@/0@@Tw*Pdir_identѐ!t@@@@@?@@@dx)Pdir_boolҐ\@@@@@MN@@ry@@A@@@@@Q__@@@@unB@@K㠠)Parsetree03p雲Ҳ$(Warnings0Ӷ.5S6V-Stdlib__Uchar0 |K?bޣ ˠ+Stdlib__Seq0yt\eǟ&Q,}.Stdlib__Lexing0zsc\ZoQ,Stdlib__Lazy0'rruSZY.Stdlib__Format0=z+.m׸.Stdlib__Either0 }rCT0J){9).Stdlib__Buffer0'ON͋[h#ڗA&Stdlib0>,W:()Longident0{C 3C(Location0>gc 7پI{YG0CamlinternalLazy0G -Ϥ;I8CamlinternalFormatBasics0cEXya"?a,@@B@@г&optionHa6@г&stringPa/Qa5@@T@@@U@@@@XgYg@@г&stringbgcg@@f@@г&optionlg @г$chartgug @@x@@@y@@@@@A@@@5@A(.location_stackYBnn@@8@@@A"!t@@@@@@@@@@nn@@@@E@@Aг$listn @г(Locationnn@@0@f]W,8@@@A3@@C@C@@@@@!@@@@A @@@- !@@#@@0@ @A$#@Ȑ6 {1 Extension points} pp@@@@@@0@IC@AA()attributeZCrr @@8@@)attr_name@#locA@@@ @@@ ss*@@H,attr_payload@'payload]C@@@ t+/t+F@@ I(attr_loc@V!t@@@ uGKuGa@@J@@A@@@@@rvbe@ Attributes such as [[\@id ARG]] and [[\@\@id ARG]]. Metadata containers passed around within the AST. The compiler ignores unknown attributes. wff{  @@@@@@@@@(F@@@5s@@Ш@гCD s&!s)@гF&string)s*s%@@N0(''(((((@8@@@A@@@@@mj@@])extension[C8@@@A @@D@ lD@@@@@z}  {}  =@  Extension points such as [[%id ARG] and [%%id ARG]]. Sub-language placeholder -- rejected by the typechecker. ~ > >A  @@@@@@@@@G*attributes\C8@@@A @@D@ mD@@@@@C  C  @@@@H8@@@A@@@@@E  I  @@@@I)core_type^C8@@@A@@@@@O J JU  @3 {1 Core language} L  L  ,@@@@@@6 {2 Type expressions} M - -M - H@@@@@@@@@J.core_type_desc_C8@@@A@@@@@W  "@@@@K,package_type`C8@@@A @@D@ nD@@@@@555|@f As {!package_type} typed values: - [(S, [])] represents [(module S)], - [(S, [(t1, T1) ; ... ; (tn, Tn)])] represents [(module S with type t1 = T1 and ... and tn = Tn)]. }}GP@@@@@@@@@L)row_fieldaC8@@@A@@@@@RR@@@@M.row_field_descbC8@@@A@@@@@;T@@@@N,object_fieldcC8@@@A@@@@@hh@@@@ O1object_field_descdC8@@@A@@@@@*@@@@P'patterneC8@@@A@@@@@AA@. {2 Patterns}  ,,,?@@@@@@@@@%Q,pattern_descfC8@@@A@@@@@)D)n@@@@,R*expressiongC8@@@A@@@@@))*^*c@-7 {2 Value expressions} ()))))@@@@@@@@@@S/expression_deschC8@@@A@@@@@/*e*e0AB@@@@GT$caseiC8@@@A@@@@@6BB7BB@̐ D Values of type {!case} represents [(P -> E)] or [(P when E0 -> E)] CBBDBB@@@@@@@@@[U%letopjC8@@@A@@@@@JBBKC)C,@@@@bV*binding_opkC8@@@A@@@@@QC.C.RCC@@@@iW1value_descriptionlC8@@@A@@@@@XCCYDD@j8 {2 Value descriptions} eCCfCC@@@@@@ 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"]] rDDsEE@@@@@@@@@X0type_declarationmC8@@@A@@@@@yEEzGG@7 {2 Type declarations} EEEE@@@@@@  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]. GGLL@@@@@@@@@Y)type_kindnC8@@@A@@@@@LLM/M=@@@@Z1label_declarationoC8@@@A@@@@@M?M?N N@7  - [{ ...; 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]}. NN OO@@@@@@@@@[7constructor_declarationpC8@@@A@@@@@OOPP@@@@\5constructor_argumentsqC8@@@A@@@@@PPQQH@@@@].type_extensionrC8@@@A@@@@@)SS1U'U,@Y c Definition of new extensions constructors for the extensive sum type [t] ([type t += ...]). 2U-U-5UU@@@@@@@@@^5extension_constructorsC8@@@A@@@@@7UU=VaVe@@@@_.type_exceptiontC8@@@A@@@@@?VgVgDWW@t 0 Definition of a new exception ([exception E]). EWWEWWL@@@@@@@@@`:extension_constructor_kinduC8@@@A@@@@@GWNWN\[ [/@@@@ a*class_typevC8@@@A@@@@@b[[g\`\e@ 4 {1 Class language} _[[_[[@@@@@@ - {2 Type expressions for the class language} `[[`[[@@@@@@@@@+b/class_type_descwC8@@@A@@@@@i\g\gx__.@@@@2c/class_signaturexC8@@@A@@@@@!z_K_K"~__@ 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]} .__/``@@@@@@@@@Fd0class_type_fieldyC8@@@A@@@@@5``6a7a<@@@@Me5class_type_field_desczC8@@@A@@@@@<a>a>=c#cB@@@@Tf+class_infos{C8@@@A@A@G@B@@@HcUcUIdVd[@ސ 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. Ud\d\Ve!e#@@@@@@@@@mg1class_description|C8@@@A @@D@ oD@@@@@ce%e%de%eS@@@@{h6class_type_declaration}C8@@@A @@D@ pD@@@@@qeUeUreUe@@@@i*class_expr~C8@@@A@@@@@xeeyfOfT@ . {2 Value expressions for the class language} eeee@@@@@@@@@j/class_expr_descC8@@@A@@@@@fVfVm4ma@@@@k/class_structureC8@@@A@@@@@m~m~mm@) 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]} mmnn@@@@@@@@@l+class_fieldC8@@@A@@@@@nnoToY@@@@m0class_field_descC8@@@A@@@@@o[o[wQwo@@@@n0class_field_kindC8@@@A@@@@@wwww@@@@o1class_declarationC8@@@A @@D@ qD@@@@@wwwx@@@@p+module_typeC8@@@A@@@@@"xfxf'xy@ܐ5 {1 Module language} xxxx0@@@@@@鐠 . {2 Type expressions for the module language}  x1x1 x1xd@@@@@@@@@q0module_type_descC8@@@A@@@@@)yy1zz@@@@r1functor_parameterC8@@@A@@@@@3zz5{{:@@@@ s)signatureC8@@@A @@D@ rD@@@@@:{{:{{@@@@t.signature_itemC8@@@A@@@@@<{{@|H|M@@@@u3signature_item_descC8@@@A@@@@@B|O|O\>j@@@@&v2module_declarationC8@@@A@@@@@^}}d7<@ 9 Values of type [module_declaration] represents [S : MT] "e==#e={@@@@@@@@@:w3module_substitutionC8@@@A@@@@@)g}}*m9>@ : Values of type [module_substitution] represents [S := M] 6n??7n?~@@@@@@@@@Nx7module_type_declarationC8@@@A@@@@@=p>vCH@Ӑ 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]. JwIIK{ @@@@@@@@@by*open_infosC8@@@A@A@G@B@@@V}  W@쐠 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]} cd@@@@@@@@@{z0open_descriptionC8@@@A @@D@ sD@@@@@qrH@ T Values of type [open_description] represents: - [open M.N] - [open M(N).O] ~II@@@@@@@@@{0open_declarationC8@@@A @@D@ tD@ @@@@@" p Values of type [open_declaration] represents: - [open M.N] - [open M(N).O] - [open struct ... end] )G@@@@@@@@@|-include_infosC8@@ @A@A@G@B@@@II@@@@}3include_descriptionC8@@@A @@D@ uD@ @@@@@I > Values of type [include_description] represents [include MT] 7@@@@@@@@@~3include_declarationC8@@@A @@D@ vD@ @@@@999l@d > Values of type [include_declaration] represents [include ME] mmm@@@@@@@@@/with_constraintC8@@@A@@@@@&]@@@@@+module_exprC8@@@A@@@@@NS@ / {2 Value expressions for the module language} @@@@@@@@@A0module_expr_descC8@@@A@@@@@UU@@@@B)structureC8@@@A @@D@ wD@ @@@@  5@@@@#C.structure_itemC8@@@A@@@@@77@@@@*D3structure_item_descC8@@@A@@@@@4`@@@@1E-value_bindingC8@@@A@@@@@ ss!@@@@8F.module_bindingC8@@@A@@@@@'(@ < Values of type [module_binding] represents [module X = ME] 45@@@@@@@@@LG@A@@@` @@c@E@ @Y@UUN?t+;@@Ш@гX'payloadHt+>It+E@@`@@c@E@ "@]@YYRQuGS@@Ш@г\(Location^[uGV\uG`@@e2@@h@E@ 5@b@@A@^[(d}  e}  &@@8@@@A4#loc@@@ @@@ @@@ @@ @@@@@@@@AВг}  0}  3@г&string}  )}  /@@c@@@$d @@г'payload}  6@@"m@@@1n@@!(C  C  @@8@@@A>@@@ @@@ @@@@@@@@@Aг $listC  @г)attributeC  C  @@@@@(@@*@(ӠӰE  E  @@8@@$PStr@@@ @@F  F  @@K$PSig@@@ @@G  G  @u / [: SIG] in an attribute or an extension point G  G  T@@@@@@@L$PTyp[@@@ @@H U WH U j@ - [: T] in an attribute or an extension point H U lH U @@@@@@@M$PPat@@@ @@@ @@@ !@@I  @ @ [? P] or [? P when E], in an attribute or an extension point +J  ,J  @@@@@@@CN@@A@@@@@@@@@ii3F  4F  @@гk)structure=F  l@@rm@@@@o@kkCG  DG  @@гm)signatureMG  n@@t#o@@@@qn``SH U YTH U ]@@гb)core_type]H U ac@@i3d@@@@fcUUcI  dI  @@гW'patternmI  nI  @@_D@@г\&optionwI  @г`*expressionI  I  @@hV@@@mW@@@@ec@A@@(O J NO J W@@8@@)ptyp_desc@@@@ "Q ` eQ ` @@O(ptyp_loc@!t@@@ %R  R  @@P.ptyp_loc_stack@.@@@ (S  S  @@Q/ptyp_attributes@.@@@ +T  T  @P7 [... [\@id1] [\@id2]] T  T  @@@@@@@R@@A@@@@@*'@@ @@@;Q ` n@@Ш@гC.core_type_descQ ` pQ ` ~@@K@@N@E@ #@J@FF?R  @@Ш@гI(LocationKR  R  @@R°@@U@E@ &@O@KKFS  @@Ш@гN.location_stackS  S  @@V԰@@Y@E@ )@U@QQL T  @@Ш@гT*attributes T   T  @@\@@_@E@ ,@[X@A@tq(XX W   W  @@8@@(Ptyp_any@@ "X   #X  (@% [_]  /X  * 0X  4@@@@@@@ GS(Ptyp_var@@@ .@@ =Y 5 7 >Y 5 K@Ӑ> A type variable such as ['a]  JY 5 M KY 5 p@@@@@@@ bT*Ptyp_arrow)arg_label@@@ /@@@ 0@@@ 1@@ cZ q s dZ q @  [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]}.  p[   qbDO@@@@@@@ U*Ptyp_tuple @@@ 2@@@ 4@@ cPR cPp@ } [Ptyp_tuple([T1 ; ... ; Tn])] represents a product type [T1 * ... * Tn]. Invariant: [n >= 2].  dqw h@@@@@@@ V+Ptyp_constrb#loc)Longident!t@@@ ^@@@ ` D@@@ a@@@ c@@ i i-@H [Ptyp_constr(lident, l)] represents: - [tconstr] when [l=[]], - [T tconstr] when [l=[T]], - [(T1, ..., Tn) tconstr] when [l=[T1 ; ... ; Tn]].  j.4 n@@@@@@@ W+Ptyp_object d@@@ d@@@ f+closed_flag@@@ g@@ o oB@n 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]}.  pCI u@@@@@@@ X*Ptyp_class#locU!t@@@ h@@@ j e@@@ k@@@ m@@ v v@ [Ptyp_class(tconstr, l)] represents: - [#tconstr] when [l=[]], - [T #tconstr] when [l=[T]], - [(T1, ..., Tn) #tconstr] when [l=[T1 ; ... ; Tn]].  w {@@@@@@@ *Y*Ptyp_alias@@@ n @@@ o@@ %| &|@, [T as 'a].  2| 3|@@@@@@@ JZ,Ptyp_variant נb@@@ p@@@ r +closed_flag@@@ s Ơ  %label@@@ t@@@ v@@@ x@@ [} \}8@񐠠  [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"]].  h~9? i@@@@@@@ [)Ptyp_poly  >#loc @@@ y@@@ {@@@ }@@@ ~@@  )@   ['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}.  *0 @@@@@@@ \,Ptyp_package@@@ @@  @ 7/ [(module S)].   @@@@@@@ ].Ptyp_extensionK@@@ @@ @ Q* [[%id]].  $ 3@@@@@@@ ^@@A@@@@@ @@@@ X  @@@@ Y 5 9 Y 5 A@@г&string Y 5 E@@@@@@ Z q u Z q @@г Z q  Z q @@ư@@г)core_type Z q  Z q @@а@@г)core_type Z q @@ٰ@@@@ cPT cP^@@г$list cPl@г)core_type cPb cPk@@@@@@@@@ #i $i @@г ,i -i@г)Longident 6i  7i@@ @@@ @@г$list Ai)@г)core_type Ii Ji(@@ @@@!@@@@ Qo Ro@@г$list [o0 \o4@г,object_field do# eo/@@;@@@< @@г no7@@D@@@@ tv uv@@г }v ~v@г)Longident v v@@^@@@_ @@г$list v@г)core_type v v@@q@@@r@@@@ | |@@г)core_type | |@@@@г&string |@@@@@@ } }@@г$list } }@г)row_field } }@@@@@ @@г } }$@@@@г&option }2@г$list }- }1@г }' },@@ʰ@@@˰ @@@̰@@@@   @@г$list  @г  @г&string  @@@@@ @@@@@г)core_type # @@@@@@ ) *@@г,package_type 3@@ @@@@ 9 :@@г)extension C@@ @@@@@A@@( I59 J5E@@8@@@A #loc!t@@@ @@@   -#loc!t@@@ @@@ @@@ @@ @@@ @@ @@@@@@@@AВг*+ 5T 5W@г-)Longident/ 5H 5S@@6 `@@@< a @@г1$list 5x@Вг56 5g 5j@г8)Longident: 5[ 5f@@A @@@G  @@г<)core_type 5m 5v@@D @@@U @@@Z  5Z@@@l 1@@(ܠܰ RV R_@@8@@(prf_desc@@@@  df d@@ _'prf_loc@ 0!t@@@   @@ `.prf_attributes@ Y@@@   @@ a@@A@@@@@ @@@ @''" dn@@Ш@г*.row_field_desc dq d@@2 Ͱ@@5@E@  @1@--& @@Ш@г0(Location2  @@9 @@<@E@  @6@22- @@Ш@г5*attributes  @@= @@@@E@  @<@@A@ =@( ; ; $ %@@8@@$Rtag #loc %label@@@ @@@  @@@  ۠ @@@ @@@ @@ I J@ ߐ 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)  V W0:@@@@@@@ nb(Rinherit @@@ @@ d;= y@ + [[ | t ]]  p;V q;f@@@@@@@ c@@A@@@@@ @@@ @LL x y@@гNO  @гQR  @@X `@@@^ a @@гT$bool  @@\ k@@гY$list U@г])core_type  @@e }@@@j ~`@@@@b_QQ ;? ;G@@гS)core_type ;K @@Z  @@@@WU@A@ @( Π ΰ hl hx@@8@@(pof_desc@ @@@  } }@@ d'pof_loc@ 0!t@@@   @@ e.pof_attributes@ Y@@@   @@ f@@A@@@@@ @@@ @''" }@@Ш@г*1object_field_desc } }@@2 Ͱ@@5@E@  @1@--& @@Ш@г0(Location2  @@9 @@<@E@  @6@22-@@Ш@г5*attributes@@= @@@@E@  @<@@A@ /@( - -$%@@8@@$Otag #loc %label@@@ @@@  @@@ @@?@@@Wg(Oinherit @@@ @@M T@@dh@@A@@@@@ W@@@ T@((TU@@г*+]^@г-.ef@@4 <@@@: = @@г0)core_typep1@@7 F2@@@@4@00vw@@г2)core_type! @@9 V @@@@6@@A@ @(  AEAL@@8@@)ppat_desc@ @@@ UZUr@@i(ppat_loc@ !t@@@ sxs@@j.ppat_loc_stack@ -@@@ @@k/ppat_attributes@ -@@@ @ O7 [... [\@id1] [\@id2]] @@@@@@@l@@A@@@@@  @@ @@@;Uc@@Ш@гC,pattern_descUeUq@@K @@N@E@  @J@FF?s@@Ш@гI(LocationKss@@R @@U@E@  @O@KKF@@Ш@гN.location_stack@@V Ӱ@@Y@E@  @U@QQL@@Ш@гT*attributes@@\ @@_@E@  @[X@A@  (   @@8@@(Ppat_anyƐ@@!  "  @ 2 The pattern [_]. .  /  2@@@@@@@Fm(Ppat_varǐ#loc@@@ @@@ @@B 3 5C 3 M@ ؐ A variable pattern such as [x] O 3 OP 3 t@@@@@@@gn*Ppat_aliasȐ _@@@ &#loc@@@ @@@ @@h u wi u @ $ An alias pattern such as [P as 'a] u  v  @@@@@@@o-Ppat_constantɐ4@@@ @@    @ @ Patterns such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n]    !5@@@@@@@p-Ppat_intervalʐO@@@ T@@@ @@!6!8!6!^@9 Patterns such as ['a'..'z']. Other forms of interval are recognized by the parser but rejected by the type-checker. !_!e!!@@@@@@@q*Ppat_tupleːU @@@ @@@ @@!!!"@Y C Patterns [(P1, ..., Pn)]. Invariant: [n >= 2] """Z"d@@@@@@@r.Ppat_construct̐#loc@!t@@@ @@@ Ơa#locZ@@@ @@@ @@@ ˠ @@@ @@ @@@ @@"e"g"e"@ 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)] ""$$"@@@@@@@(s,Ppat_variant͐%label@@@ Р *@@@ @@@ @@)$#$%*$#$M@ [Ppat_variant(`A, pat)] represents: - [`A] when [pat] is [None], - [`A P] when [pat] is [Some P] 6$N$T7$$@@@@@@@Nt+Ppat_recordΐ۠#loc!t@@@ @@@ ֠ Z@@@ @@ @@@ ڠ"+closed_flag@@@ @@_$$`$% @ 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] l%!%'m&c&n@@@@@@@u*Ppat_arrayϐ @@@ @@@ @@&o&q&o&@= Pattern [[| P1; ...; Pn |]] &o&&o&@@@@@@@v'Ppat_orА @@@ ߠ @@@ @@&&&&@53 Pattern [P1 | P2] &&&&@@@@@@@w/Ppat_constraintѐ @@@  @@@ @@&&&'@U3 Pattern [(P : T)] &'&'1@@@@@@@x)Ppat_typeҐ#loc((?((@Ԑ7 Pattern [exception P] K((L() @@@@@@@c|.Ppat_extension֐ @@@ @@Y) )Z) )+@1 Pattern [[%id]] f) )-g) )C@@@@@@@~})Ppat_openא8#loc!t@@@ @@@  @@@ @@)D)F m@1 Pattern [M.(P)] )D)p)D)@@@@@@@~@@A@@@@@ }@@@ z@vv  t@@@@wtff 3 7 3 ?@@гhi 3 Jb@гj&string 3 C 3 I@@r@@@xm@@@@ol^^ u y u @@г`'pattern u  u @@h@@гef u _@гg&string u  u @@o@@@uj@@@@li[[    @@г](constant  ^@@d_@@@@a^PP!6!:!6!G@@гR(constant!6!K!6!S@@ZȰ@@гW(constant!6!VX@@^ѰY@@@@[XJJ!!!"@@гL$list !"H@гP'pattern!" !"@@X@@@]S@@@@URDD"e"i"e"w@@гFG$"e"%"e"@гI)LongidentK."e"{/"e"@@R@@@X @@гM&option9"e"6@ВгQ$listD"e"E"e"@гVWL"e"M"e"@гY&stringU"e"V"e"@@a,@@@g- @@@l.@@г^'patterna"e"b"e"@@f8@@@z9@@@:f"e"c@@@@ebTTk$#$'l$#$3@@гVWt$#$7u$#$<@@]K@@гY&option~$#$GU@г]'pattern$#$?$#$F@@e]@@@j^`@@@@b_QQ$$$$@@гS$list$%$%@ВгXY$$$%@г[)Longident]$$$$@@d@@@j @@г_'pattern$%$% @@g@@@x@@@}$$%@@гfg$%e@@lf@@@@heWW&o&s&o&}@@гY$list&o&U@г]'pattern&o&&o&@@e@@@j`@@@@b_QQ&&&&@@гS'pattern&&&&@@[Ű@@гX'pattern&&Y@@_ΰZ@@@@\YKK&&&'@@гM'pattern&' &' @@U߰@@гR)core_type&'S@@YT@@@@VSEE'2'6'2'?@@гGH!'2'O?@гI)LongidentK*'2'C+'2'N@@R@@@XK@@@@MJ<<2'm'q3'm'z@@г>'pattern<'m'~?@@E@@@@@B?11B''C''@@г34K''(@г5&optionS''T''@г:&string\'']''@@B3@@@G4 @@@M5=@@@@?<..e((f((@@г0'patterno((1@@7E2@@@@41##u) )v) )@@г%)extension) )"&@@,U'@@@@)&)D)H)D)Q@@г)D)a)D)d@г)Longident)D)U)D)`@@&o@@@,p @@г!'pattern)D)g@@(y@@@@%#@A@@())))@@8@@)pexp_desc@@@@ ))))@@(pexp_loc@!t@@@ ))))@@.pexp_loc_stack@P@@@ )))*@@/pexp_attributes@P@@@ **#**?@r7 [... [\@id1] [\@id2]] **A**]@@@@@@@@@A@@@@@@@@@@;))@@Ш@гC/expression_desc))))@@KѰ@@N@E@ @J@FF?))@@Ш@гI(LocationK ))))@@R@@U@E@ @O@KKF)* @@Ш@гN.location_stack)* )*@@V@@Y@E@ @U@QQL(**2@@Ш@гT*attributes1**42**>@@\@@_@E@  @[X@A@(  :*e*i;*e*x@@8@@*Pexp_identܐ #loc !t@@@ @@@ @@Q*{*}R*{*@琠 , Identifiers such as [x] and [M.x] ^**_ **@@@@@@@v-Pexp_constantݐ@@@ @@l!**m!**@ X Expressions constant such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n] y"**z#+=+V@@@@@@@(Pexp_letސK(rec_flag@@@ $ s@@@ @@@ ~@@@ @@$+W+Y$+W+@- 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]}. %++*,,@@@@@@@-Pexp_functionߐI@@@ @@@ @@+,,+,- @M & [function P1 -> E1 | ... | Pn -> En] +,- +,-8@@@@@@@(Pexp_fun)arg_label@@@ N@@@ @@@ @@@ @@@ @@,-9-;,-9-}@}  [Pexp_fun(lbl, exp0, P, E1)] represents: - [fun P -> E1] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]} and [exp0] is [None] - [fun ~l:P -> E1] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]} and [exp0] is [None] - [fun ?l:P -> E1] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [None] - [fun ?l:(P = E0) -> E1] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [Some E0] Notes: - If [E0] is provided, only {{!Asttypes.arg_label.Optional}[Optional]} is allowed. - [fun P1 P2 .. Pn -> E1] is represented as nested {{!expression_desc.Pexp_fun}[Pexp_fun]}. - [let f P = E] is represented using {{!expression_desc.Pexp_fun}[Pexp_fun]}. --~-B1|1@@@@@@@ *Pexp_applyᐠ@@@ )arg_label@@@ @@@ @@ @@@ @@C11C11@  [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] "D11#M3S3^@@@@@@@:*Pexp_match␠@@@ ̠@@@ @@@ @@:N3_3a;N3_3@А + [match E0 with P1 -> E1 | ... | Pn -> En] GO33HO33@@@@@@@_(Pexp_try㐠<@@@ *@@@ @@@ @@_P33`P33@ ) [try E0 with P1 -> E1 | ... | Pn -> En] lQ33mQ34@@@@@@@*Pexp_tuple䐠e@@@ @@@ @@R44R44<@ E Expressions [(E1, ..., En)] Invariant: [n >= 2] S4=4CV44@@@@@@@.Pexp_construct吠^#loc !t@@@ !@@@ #@@@ $@@@ &@@W44W44@B [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])] X44\55@@@@@@@,Pexp_variant搠%label@@@ 'C@@@ (@@@ *@@]55]55@h [Pexp_variant(`A, exp)] represents - [`A] when [exp] is [None] - [`A E] when [exp] is [Some E] ^55a6k6v@@@@@@@+Pexp_record琠#loc V!t@@@ +@@@ -@@@ .@@ /@@@ 1}@@@ 2@@@ 4@@ b6w6y b6w6@ [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] c66h77@@@@@@@1*Pexp_field萠@@@ 5#loc !t@@@ 6@@@ 8@@4i775i77@ʐ' [E.l] Ai77Bi77@@@@@@@Y-Pexp_setfield鐠6@@@ 9#loc !t@@@ :@@@ <H@@@ =@@aj77bj787@. [E1.l <- E2] nk888>ok888Q@@@@@@@*Pexp_arrayꐠg@@@ >@@@ @@@l8R8Tl8R8s@5 [[| E1; ...; En |]] l8R8ul8R8@@@@@@@/Pexp_ifthenelse될@@@ A@@@ B@@@ C@@@ E@@m88m88@A9 [if E1 then E2 else E3] n88n88@@@@@@@-Pexp_sequence쐠@@@ F@@@ G@@o88o89$@a* [E1; E2] o89&o895@@@@@@@*Pexp_while퐠@@@ H@@@ I@@p9698p969_@7 [while E1 do E2 done] p969ap969}@@@@@@@(Pexp_for@@@ J@@@ K@@@ L.direction_flag@@@ M@@@ N@@q9~9q9~9@ 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]} (r99)w;;@@@@@@@@/Pexp_constraint@@@ O@@@ P@@;x;;<x;;<@ѐ+ [(E : T)] Hx;;>Ix;;N@@@@@@@`+Pexp_coerce=@@@ QѠ@@@ R@@@ T@@@ U@@ey;O;Qfy;O;@ [Pexp_coerce(E, from, T)] represents - [(E :> T)] when [from] is [None], - [(E : T0 :> T)] when [from] is [Some T0]. rz;;s}<(<3@@@@@@@)Pexp_sendg@@@ VI#locN%label@@@ W@@@ Y@@~<4<6~<4<[@") [E # m] ~<4<]~<4}] ====:@@@@@@@*.Pexp_letmodule#loc@@@ h@@@ j@@@ lI@@@ m@@@ n@@5=;==6=;=}@ː: [let module M = ME in E] B=~=C=~=@@@@@@@Z1Pexp_letexception{@@@ o<@@@ p@@U==V==@될8 [let exception C in E] b==c=>@@@@@@@z+Pexp_assertW@@@ q@@p>>q>>!@ j [assert E]. Note: [assert false] is treated in a special way by the type-checker. }>">(~>|>@@@@@@@)Pexp_lazyr@@@ r@@>>>>@!* [lazy E] >>>>@@@@@@@)Pexp_poly@@@ s!@@@ t@@@ v@@>>>>@F Used for method bodies. Can only be used as the expression under {{!class_field_kind.Cfk_concrete}[Cfk_concrete]} for methods (not values). >>??@@@@@@@+Pexp_object:@@@ w@@????@a2 [object ... end] ????@@@@@@@,Pexp_newtype#locJ@@@ x@@@ z@@@ {@@???@@5 [fun (type t) -> E] ?@?@2@@@@@@@)Pexp_pack%@@@ |@@ @3@5 @3@O@ { [(module ME)]. [(module ME : S)] is represented as [Pexp_constraint(Pexp_pack ME, Ptyp_package S)] @P@V@@@@@@@@@1)Pexp_open@@@ }@@@ ~@@,@@-@A@ L - [M.(E)] - [let open M in E] - [let open! M in E] 9AA :A:A]@@@@@@@Q*Pexp_letop@@@ @@GA^A`HA^Au@ݐ I - [let* P = E0 in E1] - [let* P0 = E00 and* P1 = E01 in E1] TAvA|UAA@@@@@@@l.Pexp_extension@@@ @@bAAcAA@) [[%id]] oAApAA@@@@@@@0Pexp_unreachable@@xAAI@ % [.] ABAB@@@@@@@@@A@@@@@Y@@@V@JJ*{**{*@@гLM*{*D@гN)LongidentP*{**{*@@Wu@@@]vP@@@@ROAA!**!**@@гC(constant!**D@@JE@@@@GD66$+W+[$+W+c@@г89$+W+g$+W+o@@?@@г;$list$+W+$+W+@г@-value_binding$+W+r$+W+@@H@@@M @@гE*expression$+W+F@@LG@@@@IF88+,,+,,@@г:$list+,-6@г>$case+,-+,-@@F̰@@@KͰA@@@@C@22,-9-=,-9-E@@г45,-9-I,-9-R@@;ݰ@@г7&option,-9-`,-9-f@г<*expression,-9-U,-9-_@@D@@@I @@гA'pattern$,-9-i%,-9-p@@I@@гF*expression.,-9-sG@@MH@@@@JG994C115C11@@г;*expression>C11?C11@@C@@г@$listHC113@ВгDERC11SC11@@K)@@гG*expression\C11]C11@@O3@@@Y4@@@^5aC11L@@@@NK==fN3_3cgN3_3m@@г?*expressionpN3_3qqN3_3{@@GG@@гD$listzN3_3@@гH$caseN3_3~N3_3@@PY@@@UZK@@@@MJ<<P33P33@@г>*expressionP33P33@@Fk@@гC$listP33?@гG$caseP33P33@@O}@@@T~J@@@@LI;;R44R44)@@г=$listR4489@гA*expressionR44-R447@@I@@@ND@@@@FC55W44W44@@г78W44W44@г:)Longident<W44W44@@C@@@I @@г>&optionW44:@гB*expressionW44W44@@JŰ@@@OưE@@@@GD66]55]55@@г89]55]55@@?ְ@@г;&option ]557@г?*expression]55]55@@G@@@LB@@@@DA33b6w6{b6w6@@г5$list#b6w6$b6w6@Вг:;.b6w6/b6w6@г=)Longident?8b6w69b6w6@@F@@@L @@гA*expressionCb6w6Db6w6@@I@@@Z@@@_Hb6w6%@@гH&optionPb6w6D@гL*expressionXb6w6Yb6w6@@T/@@@Y0O@@@@QN@@`i77ai77@@гB*expressionji77ki77@@JA@@гGHsi77?@гI)LongidentK|i77}i77@@RS@@@XTK@@@@MJ<<j77j78 @@г>*expressionj78j78@@Fe@@гCDj78'j78*@гF)LongidentHj78j78&@@Ox@@@Uy @@гJ*expressionj78-K@@QL@@@@NK==l8R8Vl8R8`@@г?$listl8R8o;@гC*expressionl8R8dl8R8n@@K@@@PF@@@@HE77m88m88@@г9*expressionm88m88@@A@@г>*expressionm88m88@@F@@гC&optionm88?@гG*expressionm88m88@@Oɰ@@@TʰJ@@@@LI;;o88o89 @@г=*expressiono89 o89@@E۰@@гB*expressiono89C@@ID@@@@FC55p969:p969D@@г7*expressionp969Hp969R@@?@@г<*expression(p969U=@@C>@@@@@=//.q9~9/q9~9@@г1'pattern8q9~99q9~9@@9@@г6*expressionBq9~9Cq9~9@@>@@г;*expressionLq9~9Mq9~9@@C#@@г@AUq9~9Vq9~9@@G,@@гC*expression_q9~9D@@J5E@@@@GD66ex;;fx;;"@@г8*expressionox;;&px;;0@@@F@@г=)core_typeyx;;3>@@DO?@@@@A>00y;O;Sy;O;^@@г2*expressiony;O;by;O;l@@:`@@г7&optiony;O;yy;O;@г<)core_typey;O;oy;O;x@@Ds@@@It @@гA)core_typey;O;B@@H}C@@@@EB44~<4<8~<4@@г;<~<4~<4@@@@@=//C9@@@@;8**s==t==@@г,5extension_constructor}==~==@@4T@@г1*expression==2@@8]3@@@@52$$>>>>@@г&*expression>>'@@-m(@@@@*'>>>>@@г*expression>>@@"}@@@@>>>>@@г*expression>>>>@@@@г&option>>@г)core_type>>>>@@!@@@&@@@@  ????@@г/class_structure??@@@@@@????@@г?@?@ @г&string???@@@ʰ@@@˰ @@г *expression?@  @@԰@@@@ @3@7@3@@@@г+module_expr@3@D@@@@@@@@@@@@г0open_declaration@@@@@@@@г*expression(@@@@@@@@.A^Ab/A^Al@@г%letop8A^Ap@@@@@@>AA?AA@@г堐)extensionHAA@@@@@@ؠذNAA@@@@@A@"@(  TBB!UBB%@@8@@&pc_lhs@c@@@ aB.B3bB.BC@@y(pc_guard@X@@@ @@@ rBDBIsBDBe@@&pc_rhs@e@@@ ~BfBkBfB~@@@@A@@@@@LI@@<@**%B.B9@@Ш@г-'patternB.B;B.BB@@5f@@8@E@ i@4@00&BDBQ@@Ш@г3&optionBDB^BDBd@г8*expressionBDBSBDB]@@@@@@E @@H@E@ @?@;;6BfBq@@Ш@г>*expressionBfBsBfB}@@F@@I@E@ @E@@A@(~~BBBB@@8@@$let_@@@@ BBBB@@$ands@v@@@ @@@ BBBC@@$body@@@@ CCCC(@@@@A@@@@@@@@@**%BB@@Ш@г-*binding_opBBBB@@5ذ@@8@E@ @4@00& BB@@Ш@г3$listBC BC@г8*binding_opBCBC @@@@@@E @@H@E@ @?@;;6&CC@@Ш@г>*expression/CC0CC'@@F@@I@E@  @E@@A@@(8C.C29C.C<@@8@@'pbop_op@ #loc@@@ @@@ KCCCGLCCC\@@c(pbop_pat@Y@@@ WC]CaXC]Ct@@o(pbop_exp @J@@@ cCuCydCuC@@{(pbop_loc @!t@@@ qCCrCC@@@@A@@@@@$@@@!@99.yCCCN@@Ш@г<=CCCXCCC[@г?&stringCCCQCCCW@@Ga@@@Mb @@P@E@ e@F@BB=C]Ci@@Ш@гE'patternC]ClC]Cs@@Mt@@P@E@ w@L@HHCCuC@@Ш@гK*expressionCuCCuC@@S@@V@E@ @R@NNGCC@@Ш@гQ(LocationSCCCC@@Z@@]@E@ @W@@A@w@(uuCCCC@@8@@)pval_name @#loc<@@@ @@@ CCCD@@)pval_type @K@@@ D DD D#@@ )pval_prim @Y@@@ @@@ D$D)D$D@@@ /pval_attributes@{@@@  DADF DADb@; [... [\@\@id1] [\@\@id2]]  DADd DAD@@@@@@@ ,(pval_loc@y!t@@@  "DD #DD@@ :@@A@@@@@@@@WWL *CC@@Ш@гZ[ 2CD 3CD@г]&string ;CC <CD@@e@@@k @@n@E@ @d@``[ ED D@@Ш@гc)core_type ND D OD D"@@k%@@n@E@ (@j@ff\ WD$D2@@Ш@гi$list `D$D; aD$D?@гn&string iD$D4 jD$D:@@v@@@@{A @@~@E@ D@u@qql sDADU@@Ш@гt*attributes |DADW }DADa@@|S@@@E@ V@{xjjc DD@@Ш@гm(Locationo DD DD@@vf@@y@E@ i@s@@A@=:(!! EE EE@@8@@*ptype_name@i#loc @@@ @@@  EE EF@@ ,ptype_params@ N@@@ à(variance@@@ Ġ+injectivity@@@ @@ @@ @@@ ɰ FF  FFC@d2 [('a1,...'an) t]  FDFJ FDFa@@@@@@@ +ptype_cstrs@ ~O@@@ ̠T@@@ ͠Q!t@@@ @@ @@@ Ѱ FbFg FbF@ 0 [... constraint T1=T1' ... constraint Tn=Tn'] !FF! FF@@@@@@@! *ptype_kind@|@@@ ԰!FF!FF@@!,-ptype_private@,private_flag@@@ װ!!FF!"FG@5 for [= private ...] !.FG!/FG4@@@@@@@!F.ptype_manifest@ @@@ @@@ ܰ!?G5G:!@G5G[@Ր2 represents [= T] !LG5G]!MG5Gt@@@@@@@!d0ptype_attributes@@@@ ߰!XGuGz!YGuG@; [... [\@\@id1] [\@\@id2]] !eGuG!fGuG@@@@@@@!})ptype_loc@!t@@@ !sGG!tGG@@!@@A@@@@@@@@۠۰!{EE@@Ш@гޠ߰!EE!EF@г᠐&string!EE!EE@@c@@@d @@@E@ g@@!FF@@Ш@г砐$list!FF>!FFB@Вг점)core_type!FF!FF!@@@@Вг!FF%!FF-@@@@г!FF0!FF;@@@@@ @@@!FF<@@@!FF(@@@E@ @!FbFr@@Ш@г$list!FbF!FbF@Вг)core_type!FbFu!FbF~@@@@г)core_type!FbF!FbF@@İ@@г(Location!FbF!FbF@@ϰ@@@а@@@Ѱ!FbFt&@@@E@ @"FF@@Ш@г)type_kind" FF"FF@@@@@E@ @@"FG @@Ш@г"FG "FG@@@@@E@ @"'G5GH@@Ш@г&option"0G5GT"1G5GZ@г)core_type"9G5GJ":G5GS@@@@@ @@ @E@ @"CGuG@@Ш@г*attributes"LGuG"MGuG@@#@@@E@ &@"UGG@@Ш@г젡(Location"_GG"`GG@@6@@@E@ 9@@@A@(Ра"hLL"iLL@@8@@.Ptype_abstract@@"rLL"sLL@@"-Ptype_variant"@@@ @@@ @@"LL"LL@@",Ptype_record"*@@@ @@@ @@"LL"LM @!.; Invariant: non-empty list "LM"LM.@@@@@@@"*Ptype_open@@"M/M1@@"@@A@@@@@@@@@EE"LLC@@@@F@BB"LL"LL@@гD$list"LL@@гH7constructor_declaration"LL"LL@@P@@@UK@@@@M@II"LL"LL@@гK$list"LMG@гO1label_declaration"LL"LM@@W@@@\R@@@@TQCC"M/M3U@@@@D@@A@X@(VV"M?MC"M?MT@@8@@(pld_name@!#loc"f@@@ @@@ #M]Mb# M]Mw@@# à+pld_mutable@!,mutable_flag@@@ #MxM}#MxM@@#-Ġ(pld_type@@@@ #!MM#"MM@@#9Š'pld_loc@!!t@@@ #/MM#0MM@@#GƠ.pld_attributes @@@@ #;MM#<MM@!ѐ9 [l : T [\@id1] [\@id2]] #HMM#IMN @@@@@@@#`@@A@@@@@@@@SSH#PM]Mj@@Ш@гVW#XM]Ms#YM]Mv@гY&string#aM]Ml#bM]Mr@@a 8@@@g 9 @@j@E@  <@`@\\V#kMxM@@Ш@г_`#sMxM#tMxM@@f J@@i@E@  M@d@``[#|MM@@Ш@гc)core_type#MM#MM@@k \@@n@E@  _@j@ff_#MM@@Ш@гi(Locationk#MM#MM@@r o@@u@E@  r@o@kkf#MM@@Ш@гn*attributes#MM#MM@@v @@y@E@  @ur@A@ (#OO#OO@@8@@(pcd_name!@"#loc#$@@@ @@@ #OO#OP@@#Ƞ(pcd_vars"@#i"#loc#:@@@ @@@ @@@ #PP#PP4@@#ɠ(pcd_args#@/@@@ #P5P:#P5PZ@@$ʠ'pcd_res$@#k Z@@@ @@@ #P[P`#P[Pz@@$ˠ'pcd_loc%@"_!t@@@ $P{P$ P{P@@$ ̠.pcd_attributes&@ @@@ $PP$PP@"< [C of ... [\@id1] [\@id2]] $!PP$"PP@@@@@@@$9@@A@@@@@p@@@m@nnc$)OP@@Ш@гqr$1OP$2OP@гt&string$:OP $;OP@@|!@@@! @@@E@ !@{@wwg$DPP"@@Ш@гz$list$MPP/$NPP3@г$UPP+$VPP.@г&string$^PP$$_PP*@@!5@@@!6 @@@!7@@@E@ !:@@$iP5PB@@Ш@г5constructor_arguments$rP5PD$sP5PY@@!I@@@E@ !L@@${P[Pg@@Ш@г&option$P[Ps$P[Py@г)core_type$P[Pi$P[Pr@@!d@@@!e @@@E@ !h@@$P{P@@Ш@г(Location$P{P$P{P@@!x@@@E@ !{@@$PP@@Ш@г*attributes$PP$PP@@!@@@E@ !@@A@ @(  $PP$PP@@8@@+Pcstr_tuple'$b!0@@@ @@@ !@@$PP$PQ@@$Π,Pcstr_record($u C@@@ "@@@ $@@$QQ  '@#x  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 [...]]. $QIQO$'SS@@@@@@@%@@A@@@@@ 7@@@ 4@33$PQ$PQ @@г5$list%PQ1@г9)core_type% PQ% PQ@@A!@@@F!<@@@@>@::%QQ"%QQ.@@г<$list%QQD _@г@1label_declaration%#QQ2%$QQC@@H!@@@M! j@@@@EC@A@ l@( j j%+)SS%,)ST@@8@@+ptyext_path)@##loc!t@@@ %@@@ '%@+T T%A+T T+@@%XР-ptyext_params*@$!@@@ *$(variance@@@ +$%+injectivity@@@ ,@@ -@@ .@@@ 0%c,T,T1%d,T,Tl@@%{Ѡ3ptyext_constructors+@% @@@ 3@@@ 5%t-TmTr%u-TmT@@%Ҡ.ptyext_private,@$D,private_flag@@@ 8%.TT%.TT@@%Ӡ*ptyext_loc-@#!t@@@ ;%/TT%/TT@@%Ԡ1ptyext_attributes.@"@@@ >%0TT%0TU@$19 ... [\@\@id1] [\@\@id2] %0TU%0TU&@@@@@@@%@@A@@@@@  @@ @}}p%+T T@@Ш@г%+T T'%+T T*@г)Longident%+T T%+T T&@@"@@@" @@@E@ ("@@i%,T,T>@@Ш@г$list%,T,Tg%,T,Tk@Вг)core_type%,T,TA%,T,TJ@@"@@Вг%,T,TN%,T,TV@@"İ@@г%,T,TY%,T,Td@@"Ͱ@@@"ΰ @@@"ϰ%,T,Te@@@"Ѱ%,T,T@(@@@E@ 1"@@&-TmT@@Ш@г$list& -TmT&-TmT@г5extension_constructor&-TmT&-TmT@@"@@@" @@@E@ 6"@@& .TT@@Ш@г&(.TT&).TT@@"@@@E@ 9#@@&1/TT@@Ш@г(Location&;/TT&</TT@@#@@@E@ <#@@&D0TT@@Ш@г*attributes&M0TT&N0TU@@#$@@@E@ ?#'@@A@!!(!!&V7UU&W7UU@@8@@)pext_name/@%'#loc%@@@ D@@@ F&i9UU&j9UU@@&֠)pext_kind0@!@@@ I&u:UU&v:UV@@&נ(pext_loc1@$!t@@@ L&;VV&;VV@@&ؠ/pext_attributes2@#@@@ O&<VV!&<VV=@%%< [C of ... [\@id1] [\@id2]] &<VV?&<VV`@@@@@@@&@@A@@@@@!@@@!@FF;&9UU@@Ш@гIJ&9UU&9UU@гL&string&9UU&9UU@@T#@@@Z# @@]@E@ G#@S@OOJ&:UU@@Ш@гR:extension_constructor_kind&:UU&:UU@@Z#@@]@E@ J#@Y@UUN&;VV@@Ш@гX(LocationZ&;VV&;VV@@a#@@d@E@ M#@^@ZZU&<VV0@@Ш@г]*attributes&<VV2&<VV<@@e#İ@@h@E@ P#@da@A@"@(""&?VgVk&?VgVy@@8@@2ptyexn_constructor3@".@@@ U'AVV'AVV@@'ڠ*ptyexn_loc4@%h!t@@@ X'BVV'BVV@@')۠1ptyexn_attributes5@#@@@ ['CVV'CVV@%; [... [\@\@id1] [\@\@id2]] '*CVV'+CVW@@@@@@@'B@@A@@@@@"P"M@@"@@44/'2AVV@@Ш@г75extension_constructor';AVV'<AVV@@?$@@B@E@ V$@>@::3'DBVV@@Ш@г=(Location?'NBVV'OBVV@@F$%@@I@E@ Y$(@C@??:'WCVV@@Ш@гB*attributes'`CVV'aCVV@@J$7@@M@E@ \$:@IF@A@""("y"y'iGWNWR'jGWNWl@@8@@)Pext_decl6'&@#loc&@@@ ^@@@ `@@@ b"@@@ c'#@@@ d@@@ f@@'HWoWq'HWoW@&( 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].}} 'IWW'[[[ @@@@@@@'ݠ+Pext_rebind7&q#loc!t@@@ g@@@ i@@'\[ ["@&J F [Pext_rebind(D)] re-export the constructor [D] with the new name [C] '][0[2'][0[}@@@@@@@'@@A@@@@@"@@@"@XX'HWoWs'HWoW|@@гZ$list'HWoW'HWoW@г_`'HWoW'HWoW@гb&string'HWoW'HWoW@@j$@@@p$ @@@u$@@гg5constructor_arguments'HWoW'HWoW@@o$ǰ@@гl&option'HWoWh@гp)core_type(HWoW(HWoW@@x$ٰ@@@}$ڰs@@@@urdd( \[ [( \[ [@@гfg(\[ [,#!@гh)Longidentj(\[ [ (\[ [+@@q$@@@w$#-@@@@lj@A@#/@(#-#-($b[[(%b[[@@8@@)pcty_desc8@#@@@ j(1d[[(2d[\@@(Iߠ(pcty_loc9@&!t@@@ m(?e\\ (@e\\@@(W/pcty_attributes:@$@@@ p(Kf\ \%(Lf\ \A@&ᐠ7 [... [\@id1] [\@id2]] (Xf\ \C(Yf\ \_@@@@@@@(p@@A@@@@@#c#`@@#F@44/(`d[[@@Ш@г7/class_type_desc(id[[(jd[\@@?%@@@B@E@ k%C@>@::3(re\\@@Ш@г=(Location?(|e\\(}e\\@@F%S@@I@E@ n%V@C@??:(f\ \4@@Ш@гB*attributes(f\ \6(f\ \@@@J%e@@M@E@ q%h@IF@A@##(##(i\g\k(i\g\z@@8@@+Pcty_constr;'j#loc!t@@@ s@@@ u(J%@@@ v@@@ x@@(j\}\(j\}\@'N ) - [c] - [['a1, ..., 'an] c] (k\\(l\\@@@@@@@(.Pcty_signature<#@@@ y@@(m\\(m\] @'i2 [object ... end] (m\] (m\]$@@@@@@@(*Pcty_arrow=')arg_label@@@ z%U@@@ {$@@@ |@@(n]%]'(n]%]Y@' 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]}. )o]Z]`)v^^@@@@@@@).Pcty_extension>%@@@ }@@)w^^)w^^@'' [%id] )!w^^)"w^^@@@@@@@)9)Pcty_open?"@@@ ~$=@@@ @@)4x__$@'ɐ4 [let open M in CT] )@x__0)Ax__I@@@@@@@)X@@A@@@@@$*@@@$'@)Hj\}\)Ij\}\@@г)Qj\}\)Rj\}\@г)Longident)[j\}\)\j\}\@@&2@@@&3 @@г$list)fj\}\@г)core_type)nj\}\)oj\}\@@&E@@@&F@@@@)vm\\)wm\\@@г/class_signature)m\\@@&V@@@@)n]%]))n]%]3@@г)n]%]7)n]%]@@@&f@@г)core_type)n]%]C)n]%]L@@&p@@г*class_type)n]%]O@@&y@@@@)w^^)w^^@@г)extension)w^^@@&@@@@)x__)x__ @@г0open_description)x__)x__!@@&@@г*class_type)x__$$@@&$@@@@@A@$@($$)z_K_O)z_K_^@@8@@*pcsig_self@@&A@@@ )|_g_l)|_g_@@),pcsig_fieldsA@)$@@@ @@@ )}__)}__@@* @@A@@@@@$$@@$@)|_g_v@@Ш@г!)core_type*|_g_x*|_g_@@)&ٰ@@,@E@ &@(@$$* }__@@Ш@г'$list*}__*}__@г,0class_type_field*}__*}__@@4&@@@9& @@<@E@ &@3@@A@%%($$*'``*(``@@8@@)pctf_descB@$@@@ *4``*5``@@*L(pctf_locC@(!t@@@ *B``*C``@@*Z/pctf_attributesD@&@@@ *N``*O`a@(䐠; [... [\@\@id1] [\@\@id2]] *[`a*\`a6@@@@@@@*s@@A@@@@@%*@@@%'@44/*c``@@Ш@г75class_type_field_desc*l``*m``@@?'C@@B@E@ 'F@>@::3*u``@@Ш@г=(Location?*``*``@@F'V@@I@E@ 'Y@C@??:*`a@@Ш@гB*attributes*`a *`a@@J'h@@M@E@ 'k@IF@A@%b@(%`%`*a>aB*a>aW@@8@@,Pctf_inheritE%@@@ @@*aZa\*aZax@)?. [inherit CT] *aZaz*aZa@@@@@@@*(Pctf_valF)#loc)%label@@@ @@@ ),mutable_flag@@@ ),virtual_flag@@@ '@@@@ @@ @@*aa*aa@)u, [val x: T] *aa*aa@@@@@@@++Pctf_methodG)#loc)%label@@@ @@@ ),private_flag@@@ ),virtual_flag@@@ 'v@@@ @@ @@+aa+ab4@) a [method x: T] Note: [T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}. +"b5b;+#bb@@@@@@@+:/Pctf_constraintH'@@@ '@@@ @@ @@+8bb+9bb@)ΐ6 [constraint T1 = T2] +Ebb+Fbb@@@@@@@+].Pctf_attributeI(@@@ @@+Sbb+Tbc @)鐠. [[\@\@\@id]] +`bc+abc"@@@@@@@+x.Pctf_extensionJ'@@@ @@+nc#c%&2@** [[%%id]] +zc#cD+{c#cS@@@@@@@+@@A@@@@@&B@@@&?@+aZa^+aZaj@@г⠐*class_type+aZan@@(b@@@@ՠհ+aa+aa@@Вгנذ+aa+aa@гڠ۰+aa+aa@@(}@@@(~ @@гݠް+aa+aa@@(@@гࠐ+aa+aa@@(@@г㠐)core_type+aa+aa@@(@@@(!@@@@ؠذ+aa+aa@@Вгڠ۰+ab+ab @гݠް+ab+ab@@(@@@( @@гࠐ+ab +ab@@(@@г㠐+ab+ab'@@(ɰ@@г栐)core_type+ab*+ab3@@(Ӱ@@@ (԰!@@@@۠۰,bb,bb@@Вгݠ)core_type,bb,bb@@(@@г⠐)core_type,bb,bb@@(@@@(@@@@נװ,#bb,$bc@@г٠)attribute,-bc@@)@@@@ڠ̠̰,3c#c',4c#c5@@гΠ)extension,=c#c9'@@)'@@@@@A@'@('',CcUc\,DcUcg@А!a@ )",NcUcY,OcUc[@@BA@8 @A(pci_virtK@+!,virtual_flag@@@ ,^cpcu,_cpc@@,v*pci_paramsL@,(@@@ +=(variance@@@ +C+injectivity@@@ @@ @@ @@@ ,cc,cc@@,(pci_nameM@+Q#loc+@@@ @@@ ,cc,cc@@,(pci_exprN@RE@ ,cc,cc@@,'pci_locO@+!t@@@ ,cc,cd@@,.pci_attributesP@)+@@@ ,dd,dd3@+M; [... [\@\@id1] [\@\@id2]] ,dd5,ddU@@@@@@@,@@A@Y@@@@@''@@'r@vvp,cpc}@@Ш@гyz,cpc,cpc@@)@@@E@ )@~@zz^,cc@@Ш@г}$list,cc,cc@Вг)core_type,cc,cc@@)˰@@Вг-cc-cc@@)װ@@г- cc- cc@@)@@@) @@@)-cc@@@)-cc(@@@E@ )@@-cc@@Ш@г-cc- cc@г&string-(cc-)cc@@)@@@* @@@E@ *@@-2cc@@Ш@А!a* -9cc-:cc@@@E@ *@@-Acd@@Ш@г(Location-Kcd-Lcd@@*"@@@E@ *%@@-Tdd&@@Ш@г*attributes-]dd(-^dd2@@*4@@@E@ *7@@A@(((( ( -fe%e)-ge%e:@@8@@@A(.(|@@@ @@@ @@@@(@@@(@@Aг +class_infos-ze%eH(@г*class_type-e%e=-e%eG@@*Y@@@*Z("@@($@(("("-eUeY-eUeo@@8@@@A(R(@@@ @@@ @@@@('@@@($@@Aг +class_infos-eUe}(-@г*class_type-eUer-eUe|@@*}@@@*~(8@@(:@((8(8-ee-ee@@8@@(pcl_descQ@(1@@@ ǰ-ee-ee@@-'pcl_locR@, !t@@@ ʰ-ee-ef@@-.pcl_attributesS@*I@@@ Ͱ-ff-ff0@,k7 [... [\@id1] [\@id2]] -ff2-ffN@@@@@@@-@@A@@@@@(n(k@@(^@44/-ee@@Ш@г7/class_expr_desc-ee-ee@@?*ʰ@@B@E@ *@>@::3-ef@@Ш@г=(Location?.ef.ef@@F*ݰ@@I@E@ *@C@??:.ff#@@Ш@гB*attributes.ff%.ff/@@J*@@M@E@ *@IF@A@(((((.!fVfZ."fVfi@@8@@*Pcl_constrT,#loc$!t@@@ @@@ Ҡ-Ԡ*@@@ @@@ @@.Bflfn.Cflf@,ؐ= [c] and [['a1, ..., 'an] c] .Off.Pff@@@@@@@.g-Pcl_structureU(@@@ @@.]ff.^ff@,󐠠2 [object ... end] .jff.kfg@@@@@@@.'Pcl_funV-<)arg_label@@@ נ-*i@@@ @@@ ڠ*@@@ ۠)@@@ @@.gg.ggI@-#  [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]. .gJgP.ii@@@@@@@.)Pcl_applyW)2@@@ ݠ.D-x)arg_label@@@ ޠ*@@@ @@ @@@ @@.ii.ij5@-Q [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] .j6j<.k"k,@@@@@@@.'Pcl_letX-(rec_flag@@@ .s'@@@ @@@ )p@@@ @@.k-k/.k-kf@-| 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]}. .kgkm.ll@@@@@@@/ .Pcl_constraintY)@@@ *@@@ @@/ll/ll@-- [(CE : CT)] /ll/lm@@@@@@@/+-Pcl_extensionZ+@@@ @@/!mm/"mm#@-) [[%id]] /.mm%//mm3@@@@@@@/F(Pcl_open[(@@@ )@@@ @@/Am4m6)@-֐4 [let open M in CE] /Mm4mc/Nm4m|@@@@@@@/e@@A@@@@@)@@@)@,,/Uflfp/Vflfz@@г.//^flf/_flf@г1)Longident3/hflf~/iflf@@:,?@@@@,@ @@г5$list/sflf1@г9)core_type/{flf/|flf@@A,R@@@F,S<@@@@>;--/ff/ff@@г//class_structure/ff0@@6,c1@@@@30""/gg /gg@@г$%/gg/gg@@+,s@@г'&option/gg,/gg2@г,*expression/gg!/gg+@@4,@@@9, @@г1'pattern/gg5/gg<@@9,@@г6*class_expr/gg?7@@=,8@@@@:7))/ii/ij@@г+*class_expr/ij /ij@@3,@@г0$list/ij1#@Вг45/ij/ij"@@;,@@г7*expression/ij%/ij/@@?,ɰ@@@I,ʰ@@@N,˰/ij<@@@@>;--/k-k1/k-k8@@г/00k-k<0k-kD@@6,ܰ@@г2$list0k-kU0k-kY@г7-value_binding0k-kG0k-kT@@?,@@@D, @@г<*class_expr0#k-k\=@@C,>@@@@@=//0)ll0*ll@@г1*class_expr03ll04ll@@9- @@г6*class_type0=ll7@@=-8@@@@:7))0Cmm 0Dmm@@г+)extension0Mmm,@@2-#-@@@@/,0Sm4m80Tm4m@@@г 0open_description0]m4mD0^m4mT@@(-4@@г%*class_expr0gm4mW*@@,-=*@@@@)'@A@*@(*ܠ*ܰ0mm~m0nm~m@@8@@*pcstr_self\@,|@@@ 0zmm0{mm@@0,pcstr_fields]@0*@@@ @@@ 0mm0mm@@0@@A@@@@@**@@*@0mm@@Ш@г!'pattern0mm0mm@@)-s@@,@E@ -v@(@$$0mm@@Ш@г'$list0mm0mm@г,+class_field0mm0mm@@4-@@@9- @@<@E@ -@3@@A@+++((++0nn0nn@@8@@(pcf_desc^@+"@@@ 0nn0nn@@0'pcf_loc_@/3!t@@@ 0nn0no@@0.pcf_attributes`@-\@@@ 0oo0oo1@/~; [... [\@\@id1] [\@\@id2]] 0oo30ooS@@@@@@@1 @@A@@@@@+R@@@+O@44/0nn@@Ш@г70class_field_desc1nn1nn@@?-ݰ@@B@E@ -@>@::31no@@Ш@г=(Location?1no1no@@F-@@I@E@ -@C@??:1"oo$@@Ш@гB*attributes1+oo&1,oo0@@J.@@M@E@ .@IF@A@+@(++14o[o_15o[oo@@8@@+Pcf_inherita0-override_flag@@@ +@@@ 0Ġ0#loc0@@@ @@@ @@@ @@1Yorot1Zoro@/ { [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] 1foo1gr6r:@@@@@@@1~'Pcf_valb0;#loc0@%label@@@ @@@ 0G,mutable_flag@@@ +@@@ @@ @@1r;r=1r;rw@0  [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)]} 1rxr~1 unur@@@@@@@1 *Pcf_methodc0k#loc0p%label@@@ @@@ 0w,private_flag@@@ ,@@@ @@ @@1usuu1usu@0O - [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]}) 1uu1vv@@@@@@@1 .Pcf_constraintd.8@@@ .=@@@ @@ @@1vv1vv@0r6 [constraint T1 = T2] 1vv1vv@@@@@@@2 /Pcf_initializere-@@@ @@1vv1vw@01 [initializer E] 2vw2vw@@@@@@@2 -Pcf_attributef/D@@@ @@2ww2ww;@0. [[\@\@\@id]] 2ww=2 wwP@@@@@@@27 -Pcf_extensiong.@@@ @@2-wQwS,@0* [[%%id]] 29wQwq2:wQw@@@@@@@2Q@@A@@@@@,@@@,@2Aorov2Boro@@г2Joro2Koro@@/!@@г *class_expr2Toro2Uoro@@/+@@г&option2^oro@г2eoro2foro@г&string2noro2ooro@@/E@@@$/F @@@)/G@@@@  2wr;r?2xr;rF@@Вг  2r;rQ2r;rT@г2r;rK2r;rP@@/b@@@/c @@г2r;rW2r;rc@@/l@@г0class_field_kind2r;rf2r;rv@@/v@@@3/w@@@@  2usuw2usu@@Вг  2usu2usu@г2usu2usu@@/@@@/ @@г2usu2usu@@/@@г0class_field_kind2usu2usu@@/@@@3/@@@@  2vv2vv@@Вг )core_type2vv2vv@@/@@г)core_type2vv2vv@@/Ű@@@"/ư@@@@2vv2vv@@г*expression3vv @@/ְ @@@@  3ww!3ww.@@г)attribute3ww2@@/@@@@3wQwU3wQwb@@г)extension3 wQwf-r@@/-s@@@@@A@-u@(-s-s3&ww3'ww@@8@@+Cfk_virtualh/@@@ @@35ww36ww@@3M,Cfk_concretei2-override_flag@@@ /0@@@ @@3Iww-@@3`@@A@@@@@-@@@-@""3Pww3Qww@@г$)core_type3Zww%@@+00&@@@@(@$$3`ww3aww@@г&'3iww3jww@@-0@@@г)*expression3sww-@@00I-@@@@-@@A@-@(--3yww3zww@@8@@@A.A.@@@ @@@ @@@@-@@@-@@Aг +class_infos3wx -@г*class_expr3ww3wx@@0l@@@0m-@@-@(-ՠ-հ3"xfxj3"xfxu@@8@@)pmty_descj@-@@@ 3$x~x3$x~x@@3(pmty_lock@2!t@@@ 3%xx3%xx@@3/pmty_attributesl@08@@@ #3&xx3&xx@2Z7 [... [\@id1] [\@id2]] 3&xx3&xx@@@@@@@3@@A@@@@@. .@@-@44/3$x~x@@Ш@г70module_type_desc3$x~x3$x~x@@?0@@B@E@ 0@>@::33%xx@@Ш@г=(Location?3%xx3%xx@@F0̰@@I@E@ !0@C@??:3&xx@@Ш@гB*attributes4&xx4&xx@@J0ް@@M@E@ $0@IF@A@.C.@(.'.'4)yy4)yy@@8@@*Pmty_identm2#loc*!t@@@ &@@@ (@@4'*yy4(*yy:@2 [Pmty_ident(S)] represents [S] 44*yy<45*yya@@@@@@@4L.Pmty_signaturen.K@@@ )@@4B+ybyd4C+yby@2ؐ/ [sig ... end] 4O+yby4P+yby@@@@@@@4g,Pmty_functoro.m@@@ *.@@@ +@@4b,yy4c,yy@2; [functor(X : MT1) -> MT2] 4o-yy4p-yy@@@@@@@4)Pmty_withp.@@@ ,4-@@@ -@@@ /@@4.yy4.yz&@3/ [MT with ...] 4.yz(4.yz<@@@@@@@4+Pmty_typeofq-@@@ 0@@4/z=z?4/z=z[@385 [module type of ME] 4/z=z]4/z=zw@@@@@@@4.Pmty_extensionr1L@@@ 1@@40zxzz40zxz@3S) [[%id]] 40zxz40zxz@@@@@@@4*Pmty_aliass3#loc+:!t@@@ 2@@@ 4@@41zz.@3u. [(module M)] 41zz41zz@@@@@@@5@@A@@@@@/@@@/@ܠܰ4*yy4*yy'@@гޠ߰4*yy7@гࠡ)Longident5*yy+5*yy6@@1ݰ@@@1ް@@@@ӠӰ5+ybyf5+ybyt@@гՠ)signature5+ybyx@@1@@@@֠ȠȰ5,yy5,yy@@гʠ1functor_parameter5(,yy5),yy@@1@@гϠ+module_type52,yy@@2@@@@Р °58.yy59.yz@@гĠ+module_type5B.yz5C.yz@@2@@гɠ$list5L.yz"@г͠/with_constraint5T.yz5U.yz!@@2+@@@2,@@@@Ϡ5\/z=zA5]/z=zL@@гà+module_expr5f/z=zP@@2<@@@@Ġ5l0zxz|5m0zxz@@г)extension5v0zxz@@2L@@@@5|1zz5}1zz@@г51zz/@г)Longident51zz51zz@@2e@@@2f/@@@@@A@/@(//53zz53zz@@8@@$Unitt@@54zz54z{@46& [()] 54z{54z{ @@@@@@@5%Namedu4#loc565#@@@ 5@@@ 7@@@ 90@@@ :@@55{{/@4` [Named(name, MT)] represents: - [(X : MT)] when [name] is [Some X], - [(_ : MT)] when [name] is [None] 56{;{A58{{@@@@@@@5@@A@@@@@/@@@/@AA54zz?@@@@B?1155{{55{{@@г3455{{)55{{,@г6&option55{{"55{{(@г;&string65{{65{{!@@C2װ@@@H2ذ @@@N2ٰ@@г@+module_type6 5{{/0@@G20@@@@DB@A@0@(006:{{6:{{@@8@@@A50@@@ ;@@@ =@@@@0 @@@0@@Aг $list6&:{{0&@г.signature_item6.:{{6/:{{@@3@@@301@@03@(010166<{{67<{{@@8@@)psig_descv@07@@@ >6C>|| 6D>||,@@6[(psig_locw@4!t@@@ A6Q?|-|26R?|-|G@@6i@@A@@@@@0N@@@0K@6Y>||@@Ш@г3signature_item_desc6b>||6c>||+@@&39@@)@E@ ?3<@%@!!6k?|-|:@@Ш@г$(Location&6u?|-|<6v?|-|F@@-3L@@0@E@ B3O@*@@A@0t@(0r0r6~B|O|S6B|O|f@@8@@*Psig_valuex27@@@ D@@6C|i|k6C|i|@5# E - [val x: T] - [external x: T = "s1" ... "sn"] 6D||6F||@@@@@@@6)Psig_typey5l(rec_flag@@@ E6E2;@@@ F@@@ H@@6G||6G|}@5I ' [type t1 = ... and ... and tn = ...] 6H}}6H}}B@@@@@@@6 .Psig_typesubstz6e2[@@@ I@@@ K@@6I}C}E6I}C}n@5i ) [type t1 := ... and ... and tn := ...] 6J}o}u6J}o}@@@@@@@6!+Psig_typext{2-@@@ L@@6K}}6K}}@52 [type t1 += ...] 6K}}6K}}@@@@@@@7".Psig_exception|2-@@@ M@@7 L}}7 L}~@54 [exception C of T] 7L}~7L}~@@@@@@@7.#+Psig_module}1@@@ N@@7$M~~!7%M~~D@5 $ [module X = M] and [module X : MT] 71M~~F72M~~o@@@@@@@7I$-Psig_modsubst~1@@@ O@@7?N~p~r7@N~p~@5Ր1 [module X := M] 7LN~p~7MN~p~@@@@@@@7d%.Psig_recmodule61K@@@ P@@@ R@@7_O~~7`O~~@5 , [module rec X1 : MT1 and ... and Xn : MTn] 7lP~~7mP~@@@@@@@7&,Psig_modtype1?@@@ S@@7zQ7{QB@6 * [module type S = MT] and [module type S] 7RCI7RCx@@@@@@@7'1Psig_modtypesubst1Z@@@ T@@7Sy{7Sy@6+: [module type S := ...] 7T7T@@@@@@@7()Psig_open1H@@@ U@@7U7U@6F* [open X] 7U7U@@@@@@@7),Psig_include1!@@@ V@@7V7V*@6a. [include MT] 7V,7V?@@@@@@@7**Psig_class7}2@@@ W@@@ Y@@7W@B7W@h@6 ' [class c1 : ... and ... and cn : ...] 7Xio7Xi@@@@@@@8+/Psig_class_type72@@@ Z@@@ \@@8 Y8 Y@6 . [class type ct1 = ... and ... and ctn = ...] 8Z8Z@@@@@@@80,.Psig_attribute5X@@@ ]@@8&[  8'[ (@6. [[\@\@\@id]] 83[ *84[ =@@@@@@@8K-.Psig_extension4@@@ ^4@@@ _@@8F\>@28@6ې* [[%%id]] 8R\>l8S\>{@@@@@@@8j.@@A@@@@@2H@@@2E@Ԡ԰8ZC|i|m8[C|i|w@@г֠1value_description8dC|i|{@@5:@@@@נɠɰ8jG||8kG||@@гˠ̰8sG||8tG||@@5J@@гΠ$list8}G|} @гҠ0type_declaration8G||8G|} @@5\@@@5]@@@@ԠƠư8I}C}G8I}C}U@@гȠ$list8I}C}j@г̠0type_declaration8I}C}Y8I}C}i@@5v@@@5w@@@@Π8K}}8K}}@@г .type_extension8K}}@@5@@@@à8L}}8L}}@@г.type_exception8L}}@@5@@@@8M~~#8M~~.@@г2module_declaration8M~~2@@5@@@@8N~p~t8N~p~@@г3module_substitution8N~p~@@5@@@@8O~~8O~~@@г$list8O~~@г2module_declaration8O~~8O~~@@5а@@@5Ѱ@@@@9Q9Q'@@г7module_type_declaration9 Q+@@5@@@@9Sy}9Sy@@г7module_type_declaration9Sy@@5@@@@xx9!U9"U@@гz0open_description9+U{@@6|@@@@~{mm91V92V@@гo3include_description9;Vp@@v6q@@@@spbb9AW@D9BW@N@@гd$list9KW@d`@гh1class_description9SW@R9TW@c@@p6*@@@u6+k@@@@mj\\9[Y9\Y@@г^$list9eYZ@гb6class_type_declaration9mY9nY@@j6D@@@o6Ee@@@@gdVV9u[  9v[ @@гX)attribute9[ Y@@_6UZ@@@@\YKK9\>B9\>P@@гM)extension9\>T9\>]@@U6f@@гR*attributes9\>`3@@Y6o3@@@@VT@A@3@(339^}9^}@@8@@(pmd_name@8p#loc9'9@@@ `@@@ b@@@ d9`9`@@9/(pmd_type@3@@@ g9a9a@@90.pmd_attributes@6C@@@ j9b9b@8e; [... [\@\@id1] [\@\@id2]] 9b9b@@@@@@@91'pmd_loc@8A!t@@@ m9c"9c6@@:2@@A@@@@@33@@3@KK;9`@@Ш@гNO9`9`@гQ&option:`:`@гV&string: `: `@@^6@@@c6 @@@i6@@l@E@ e6@]@YYT:a@@Ш@г\+module_type: a:!a@@d6@@g@E@ h6@c@__Z:)b@@Ш@гb*attributes:2b:3b@@j7 @@m@E@ k7 @ifXXQ:;c)@@Ш@г[(Location]:Ec+:Fc5@@d7@@g@E@ n7@a@@A@4643(4'4':Ng}:Og}@@8@@(pms_name@9#loc9@@@ s@@@ u:ai:bi@@:y3,pms_manifest@91#loc0!t@@@ x@@@ z:uj:vj@@:4.pms_attributes@6@@@ }:k:k@9; [... [\@\@id1] [\@\@id2]] :k:k@@@@@@@:5'pms_loc@8!t@@@ :l$:l8@@:6@@A@@@@@4w4t@@4g@NNC:i@@Ш@гQR:i:i@гT&string:i:i@@\7@@@b7 @@e@E@ v7@[@WWJ:j@@Ш@гZ[:j:j@г])Longident_:j:j@@f7@@@l7 @@o@E@ {7@c@__Z:k@@Ш@гb*attributes:k:k@@j7@@m@E@ ~7@ifXXQ:l+@@Ш@г[(Location]:l-:l7@@d7ΰ@@g@E@ 7@a@@A@44Ѡ(4Š4Ű;p;p@@8@@)pmtd_name@9#loc:q@@@ @@@ ;r;r@@;+7)pmtd_type@:5[@@@ @@@ ;$s;%s@@;<8/pmtd_attributes@7@@@ ;0t;1t@9Ɛ; [... [\@\@id1] [\@\@id2]] ;=t;>t'@@@@@@@;U9(pmtd_loc@9!t@@@ ;Ku(-;Lu(B@@;c:@@A@@@@@55@@5@KK@;Sr@@Ш@гNO;[r;\r@гQ&string;dr;er@@Y8;@@@_8< @@b@E@ 8?@X@TTJ;ns@@Ш@гW&option;ws;xs@г\+module_type;s;s@@d8W@@@i8X @@l@E@ 8[@c@__Z;t@@Ш@гb*attributes;t;t@@j8j@@m@E@ 8m@ifXXQ;u(5@@Ш@г[(Location];u(7;u(A@@d8}@@g@E@ 8@a@@A@5o5l(5`5`;} ;} @А!a@ 8;} ;} @@l@8@A*popen_expr@E@ ;%*;%9@@;;.popen_override@:-override_flag@@@ ;:?;:]@@;<)popen_loc@:8!t@@@ ;^c;^y@@;=0popen_attributes@8a@@@ ;z;z@@<>@@A@Y@@@@@55@@5@441;%4@@Ш@А!a:8Ұ;%6;%8@@?@E@ 8@=@993<:M@@Ш@г<=<:O<:\@@C8@@F@E@ 8@A@==6<^l@@Ш@г@(LocationB5@г<_:<`=@г)Longident!t@@@ @@@ Р8!@@@ @@=DF=D{@< # [with module type X.Y := sig end] =|=|@@@@@@@>E/Pwith_typesubst<#loc4f!t@@@ @@@ Ԡ9@@@ @@>>@< 5 [with type X.t := ..., same format as [Pwith_type]] >>%@@@@@@@>6F.Pwith_modsubst<#loc4!t@@@ @@@ ؠ<#loc4!t@@@ @@@ @@>A&(7_@<֐8 [with module X.Y := Z] >M^d>N^@@@@@@@>eG@@A@@@@@7o@@@7l@>U>V@@г>^>_@г)Longident>h>i@@;?@@@;@ @@г 0type_declaration>s @@;I @@@@  >y>z@@г>>@г)Longident>>@@ ;c@@@;d @@г>@г)Longident >>@@;v@@@;w @@@@ >>@@г> > @г)Longident>> @@;@@@; @@г+module_type>@@ ;@@@@>DH>DZ@@г>Dj>Dm@г)Longident>D^>Di@@;@@@ ; @@г+module_type>Dp@@;@@@@>>@@г>>@г)Longident??@@;ٰ@@@;ڰ @@г0type_declaration? @@;@@@@?&*?&8@@г?&H?&K@г󠡐)Longident?&&<?'&G@@;@@@; @@г?0&Z8N@г)Longident?9&N?:&Y@@<@@@<8Z@@@@@A@8\@(8Z8Z?A?B@@8@@)pmod_desc@8S@@@ ܰ?N?O@@?fH(pmod_loc@=!t@@@ ߰?\?] @@?tI/pmod_attributes@;@@@ ?h?i/@=7 [... [\@id1] [\@id2]] ?u1?vM@@@@@@@?J@@A@@@@@88@@8@44/?}@@Ш@г70module_expr_desc??@@?<]@@B@E@ <`@>@::3?@@Ш@г=(Location??? @@F#loc6%!t@@@ @@@ @@?ln?l@>a% [X] ?l?l@@@@@@@?K.Pmod_structure8@@@ @@??@>|2 [struct ... end] ??@@@@@@@@ L,Pmod_functor:@@@ 9@@@ @@@@@>: [functor(X : MT1) -> ME] @ @,@@@@@@@@+M*Pmod_apply9:@@@ 9?@@@ @@@&-/@'-X@>, [ME1(ME2)] @3-Z@4-k@@@@@@@@KN/Pmod_constraint9Z@@@ :~@@@ @@@Fln@Gl@>ܐ- [(ME : MT)] @Sl@Tl@@@@@@@@kO+Pmod_unpack+ [(val E)] @n@o@@@@@@@@P.Pmod_extension= @@@ @@@|9@?) [[%id]] @@@@@@@@@@Q@@A@@@@@9@@@9@Ԡ԰@lp@lz@@г֠װ@l@гؠ)Longidentڰ@l~@l@@=y@@@=z@@@@٠ˠ˰@@@@г͠)structure@@@=@@@@Π@@@@г 1functor_parameter@@@@=@@гǠ+module_expr@@@=@@@@Ƞ@-1@-;@@г+module_expr@-?@-J@@=@@г+module_expr@-M@@=@@@@ @lp@l@@г+module_expr@l@l@@=ϰ@@г+module_typeAl@@=ذ@@@@AA @@г*expressionA@@=@@@@AA@@г)extensionA":%@@=:&@@@@@A@:(@(:&:&A(A)@@8@@@A@Ƞ:%@@@ @@@ @@@@:+@@@:(@@Aг $listA<1:1@г.structure_itemAD"AE0@@>@@@>:<@@:>@(:<:<AL7;AM7I@@8@@)pstr_desc@:B@@@ AYRWAZRv@@AqR(pstr_loc@?!t@@@ Agw|Ahw@@AS@@A@@@@@:Y@@@:V@AoR`@@Ш@г3structure_item_descAxRbAyRu@@&>O@@)@E@ >R@%@!!Aw@@Ш@г$(Location&AwAw@@->b@@0@E@ >e@*@@A@:@(:}:}AA@@8@@)Pstr_eval=@@@ >@@@ @@AA@@>% [E] AA@@@@@@@AT*Pstr_value@(rec_flag@@@ A`:@@@ @@@ @@AA@@d 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]}. AA^h@@@@@@@AU.Pstr_primitive=@@@ @@AikAi@@ < - [val x: T] - [external x: T = "s1" ... "sn" ]AA@@@@@@@BV)Pstr_type@(rec_flag@@@ A=@@@ @@@ @@BB @@ & [type t1 = ... and ... and tn = ...] B B <@@@@@@@B4W+Pstr_typext=i@@@ @@B*=?B+=^@@2 [type t1 += ...] B7=`B8=w@@@@@@@BOX.Pstr_exception=i@@@ @@BExzBFx@@ې 8 - [exception C of T] - [exception C = M.X] BRBS@@@@@@@BjY+Pstr_module;;@@@ @@B`Ba@@1 [module X = ME] BmBn@@@@@@@BZ.Pstr_recmoduleB;Z@@@ @@@ @@BBD@A , [module rec X1 = ME1 and ... and Xn = MEn] BEKBE|@@@@@@@B[,Pstr_modtype<`@@@ @@B}B}@A16 [module type S = MT] B}B}@@@@@@@B\)Pstr_open<3@@@ @@BB@AL* [open X] BB@@@@@@@B]*Pstr_classBh=@@@ @@@ @@BB!@Al ' [class c1 = ... and ... and cn = ...] B"(B"T@@@@@@@B^/Pstr_class_typeB=@@@ @@@ @@BUWBU@A . [class type ct1 = ... and ... and ctn = ...] CC@@@@@@@C_,Pstr_includes@@@@urddDnDo@@гf3include_declarationDxg@@mANh@@@@jgYYD~D@@г[)attributeD\@@bA^]@@@@_\NND48D4F@@гP)extensionD4JD4S@@XAo@@гU*attributesD4V=@@\Ax=@@@@YW@A@=@(==DswDs@@8@@'pvb_pat@@@@@ DD@@Dc(pvb_expr@@@@@ DD@@Dd.pvb_attributes@AA@@@ DD@@De'pvb_loc@C2!t@@@ DD@@Df@@A@@@@@=@@@=@33.D@@Ш@г6'patternDD@@>Að@@A@E@ A@=@994D@@Ш@г<*expressionDD@@DAհ@@G@E@ A@C@??:E@@Ш@гB*attributesEE@@JA@@M@E@ A@I@EE>E@@Ш@гH(LocationJE#E$@@QA@@T@E@ !A@N@@A@> @(>>E,E- @@8@@(pmb_name@C#locDD@@@ #@@@ %@@@ 'EDEE5@@E\g(pmb_expr@>i@@@ *EP6;EQ6Q@@Ehh.pmb_attributes@A@@@ -E\RWE]Rr@@Eti'pmb_loc@C!t@@@ 0EjsxEks@@Ej@@A@@@@@>G>D@@>7@>>.Er!@@Ш@гABEz1E{4@гD&optionE*E0@гI&stringE#E)@@QBc@@@VBd @@@\Be@@_@E@ (Bh@P@LLGE6C@@Ш@гO+module_exprE6EE6P@@WBw@@Z@E@ +Bz@V@RRMERe@@Ш@гU*attributesERgERq@@]B@@`@E@ .B@\@XXQEs@@Ш@г[(Location]EsEs@@dB@@g@E@ 1B@a@@A@>>@CB>@Eݐ. {1 Toplevel} EE@@@@@@0EEEEEEEE@CW>?s????$g?8???Z?u ? z? ? ? a? ? @  |@@@( @/@6 @W~@e@l@s@zZ@@@m@@@@@AHAA(A/AC%AJA^ Ae!_Al"hA#&A#A%A&PA&A'UA'A1B2rB 7B!7B(7B/8]B68B=9]BX9B_=B=C0>YB>}B>CQCK@AFF/6 {2 Toplevel phrases} F*F+@@@@@@RA(/toplevel_phraseDF5 F6@@8@@(Ptop_defȐ?B@@@Z@@FD!FE8@@F\o(Ptop_dirɐ2toplevel_directiveD@@@[@@FT9;FU9[@Dꐠ5 [#use], [#load] ... Fa9]Fb9w@@@@@@@Fyp@@A@@@@@Fe@@@@F|k@//Fl#Fm+@@г1)structureFv/2@@80FtFsFsFtFtFtFtFt@K8@@@A@@@@@@@@-8@@@A@@@@@FyyF @@@@Fl2directive_argumentD8@@@A@@@@@FFZ]@@@@Fm7directive_argument_descD8@@@A@@@@@F__F@@@@Fn@AL@@@@N@JJF9=F9E@@гL2toplevel_directiveF9IK@@S)L@@@@NK@A@=@(SSFy}Fy@@8@@)pdir_name@Ev#locF@@@\@@@^F F @@Fq(pdir_arg@F:D@@@a@@@cF F @@Fr(pdir_loc@E.!t@@@fF F @@Fs@@A@@@@@\@@@Y@22'F @@Ш@г56F F @г8&stringF F @@@{@@@F| @@I@F@_@?@;;1F @@Ш@г>&optionG G @гC2directive_argumentG  G  @@K@@@P @@S@F@d@J@FF?G @@Ш@гI(LocationKG  G! @@R@@U@F@g@O@@A@@(G)G*@@8@@*pdira_desc@@@@lG6G7>@@GNt)pdira_loc@E!t@@@oGD?CGE?Y@@G\u@@A@@@@@@@@@GL$@@Ш@г7directive_argument_descGU&GV=@@&@@)@F@m@%@!!G^?L@@Ш@г$(Location&Gh?NGi?X@@-@@0@F@p@*@@A@@(Gq_cGr_z@@8@@+Pdir_stringϐF@@@r@@G}G}@@Gv(Pdir_intАF@@@sG GW@@@t@@@v@@GG@@Gw*Pdir_identѐ>!t@@@w@@GG@@Gx)Pdir_boolҐG@@@x@@G)@@Gy@@A@@@@@,@@@)@DDG}G}@@гF&stringG}G@@MQH@@@@J@FFGG@@гH&stringGG@@Pb@@гM&optionGI@гQ$charGG@@Yt@@@^uT@@@@V@RRGG@@гT)LongidentVGT@@\U@@@@W@SSHH@@гU$boolH @@\@@@@Y@@A@@@4@@FFA@EEA@EIECA@D@B@D@yB@E.@WB@D?B@Da?B@D\;B@DC;cB@D>:B@D9:gB@D4:B@D/9B@D9B@D4B@D3B@D)B@C)mB@C(B@C(lB@C'B@C%B@C%HB@C$B@C#B@C#B@Ct!B@Co!QB@C] B@CX 'B@C9B@C4|B@C"*B@CB@CB@CB@BB@BB@B 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]}. ? ~* [Ptyp_tuple([T1 ; ... ; Tn])] represents a product type [T1 * ... * Tn]. Invariant: [n >= 2]. ? * [Ptyp_constr(lident, l)] represents: - [tconstr] when [l=[]], - [T tconstr] when [l=[T]], - [(T1, ..., Tn) tconstr] when [l=[T1 ; ... ; Tn]]. ?s 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]}. ?P * [Ptyp_class(tconstr, l)] represents: - [#tconstr] when [l=[]], - [T #tconstr] when [l=[T]], - [(T1, ..., Tn) #tconstr] when [l=[T1 ; ... ; Tn]]. ?&-* [T as 'a]. ? * [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"]]. >֠ * ['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}. >0* [(module S)]. >+* [[%id]]. > * As {!package_type} typed values: - [(S, [])] represents [(module S)], - [(S, [(t1, T1) ; ... ; (tn, Tn)])] represents [(module S with type t1 = T1 and ... and tn = Tn)]. Em 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) ;,* [[ | t ]] ;ࠠ/* {2 Patterns} EF8* [... [\@id1] [\@id2]] :3* The pattern [_]. :+ !* A variable pattern such as [x] : %* An alias pattern such as [P as 'a] 9ꠠ A* Patterns such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n] 9Ҡ * Patterns such as ['a'..'z']. Other forms of interval are recognized by the parser but rejected by the type-checker. 9 D* Patterns [(P1, ..., Pn)]. Invariant: [n >= 2] 9 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)] 9[ * [Ppat_variant(`A, pat)] represents: - [`A] when [pat] is [None], - [`A P] when [pat] is [Some P] 98 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] 9>* Pattern [[| P1; ...; Pn |]] 8蠠4* Pattern [P1 | P2] 8ˠ4* Pattern [(P : T)] 84* Pattern [#tconst] 83* Pattern [lazy P] 8v * [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)] 8S8* Pattern [exception P] 8;2* Pattern [[%id]] 8#2* Pattern [M.(P)] 78* {2 Value expressions} Eg8* [... [\@id1] [\@id2]] 5 -* Identifiers such as [x] and [M.x] 57 Y* Expressions constant such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n] 5 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]}. 4 '* [function P1 -> E1 | ... | Pn -> En] 4ڠ * [Pexp_fun(lbl, exp0, P, E1)] represents: - [fun P -> E1] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]} and [exp0] is [None] - [fun ~l:P -> E1] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]} and [exp0] is [None] - [fun ?l:P -> E1] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [None] - [fun ?l:(P = E0) -> E1] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [Some E0] Notes: - If [E0] is provided, only {{!Asttypes.arg_label.Optional}[Optional]} is allowed. - [fun P1 P2 .. Pn -> E1] is represented as nested {{!expression_desc.Pexp_fun}[Pexp_fun]}. - [let f P = E] is represented using {{!expression_desc.Pexp_fun}[Pexp_fun]}. 4 * [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] 4 ,* [match E0 with P1 -> E1 | ... | Pn -> En] 4` ** [try E0 with P1 -> E1 | ... | Pn -> En] 4> F* Expressions [(E1, ..., En)] Invariant: [n >= 2] 4! * [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])] 3 * [Pexp_variant(`A, exp)] represents - [`A] when [exp] is [None] - [`A E] when [exp] is [Some E] 3Ԡ * [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] 3(* [E.l] 3x/* [E1.l <- E2] 3N6* [[| E1; ...; En |]] 31:* [if E1 then E2 else E3] 3 +* [E1; E2] 28* [while E1 do E2 done] 2Р 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]} 2,* [(E : T)] 2 * [Pexp_coerce(E, from, T)] represents - [(E :> T)] when [from] is [None], - [(E : T0 :> T)] when [from] is [Some T0]. 2_** [E # m] 2;,* [new M.c] 2+* [x <- 2] 1 * [{< x1 = E1; ...; xn = En >}] 1ˠ;* [let module M = ME in E] 19* [let exception C in E] 1 k* [assert E]. Note: [assert false] is treated in a special way by the type-checker. 1i+* [lazy E] 1Q * Used for method bodies. Can only be used as the expression under {{!class_field_kind.Cfk_concrete}[Cfk_concrete]} for methods (not values). 1/3* [object ... end] 16* [fun (type t) -> E] 0 |* [(module ME)]. [(module ME : S)] is represented as [Pexp_constraint(Pexp_pack ME, Ptyp_package S)] 0ܠ M* - [M.(E)] - [let open M in E] - [let open! M in E] 0 J* - [let* P = E0 in E1] - [let* P0 = E00 and* P1 = E01 in E1] 0** [[%id]] 0&* [.] 0} E* Values of type {!case} represents [(P -> E)] or [(P when E0 -> E)] E9* {2 Value descriptions} E<* [... [\@\@id1] [\@\@id2]] ) * 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"]] E8* {2 Type declarations} E3* [('a1,...'an) t] )8 1* [... constraint T1=T1' ... constraint Tn=Tn'] )6* for [= private ...] (렠3* represents [= T] (Р<* [... [\@\@id1] [\@\@id2]] ( * 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]. E<* 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]}. E}=* [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 [...]]. %B:* ... [\@\@id1] [\@\@id2] $ d* Definition of new extensions constructors for the extensive sum type [t] ([type t += ...]). Eg=* [C of ... [\@id1] [\@id2]] #<* [... [\@\@id1] [\@\@id2]] # 1* Definition of a new exception ([exception E]). EU 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} EC .* {2 Type expressions for the class language} E98* [... [\@id1] [\@id2]] ! ** - [c] - [['a1, ..., 'an] c] !3* [object ... end] !u 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]}. !R(* [%id] !:5* [let open M in CT] ! * 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]} E3<* [... [\@\@id1] [\@\@id2]]  /* [inherit CT] -* [val x: T] ~ b* [method x: T] Note: [T] can be a {{!core_type_desc.Ptyp_poly}[Ptyp_poly]}. K7* [constraint T1 = T2] +/* [[\@\@\@id]] +* [[%%id]] <* [... [\@\@id1] [\@\@id2]]  * 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. E' /* {2 Value expressions for the class language} D8* [... [\@id1] [\@id2]] >* [c] and [['a1, ..., 'an] c] 63* [object ... end]  * [Pcl_fun(lbl, exp0, P, CE)] represents: - [fun P -> CE] when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]} and [exp0] is [None], - [fun ~l:P -> CE] when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]} and [exp0] is [None], - [fun ?l:P -> CE] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [None], - [fun ?l:(P = E0) -> CE] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} and [exp0] is [Some E0].  * [Pcl_apply(CE, [(l1,E1) ; ... ; (ln,En)])] represents [CE ~l1:E1 ... ~ln:En]. [li] can be empty (non labeled argument) or start with [?] (optional argument). Invariant: [n > 0] Ơ Q* [Pcl_let(rec, [(P1, E1); ... ; (Pn, En)], CE)] represents: - [let P1 = E1 and ... and Pn = EN in CE] when [rec] is {{!Asttypes.rec_flag.Nonrecursive}[Nonrecursive]}, - [let rec P1 = E1 and ... and Pn = EN in CE] when [rec] is {{!Asttypes.rec_flag.Recursive}[Recursive]}. .* [(CE : CT)] ** [[%id]] i5* [let open M in CE] M * 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]} D<* [... [\@\@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] /* [[\@\@\@id]] +* [[%%id]] |6* {1 Module language} Dᠠ /* {2 Type expressions for the module language} Dנ8* [... [\@id1] [\@id2]]  !* [Pmty_ident(S)] represents [S] 0* [sig ... end] u<* [functor(X : MT1) -> MT2] X0* [MT with ...] 66* [module type of ME] ** [[%id]] /* [(module M)] 砠'* [()] ) * [Named(name, MT)] represents: - [(X : MT)] when [name] is [Some X], - [(_ : MT)] when [name] is [None]  F* - [val x: T] - [external x: T = "s1" ... "sn"] B (* [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] 2* [module X := M]  -* [module rec X1 : MT1 and ... and Xn : MTn]  +* [module type S = MT] and [module type S] m;* [module type S := ...] U+* [open X] =/* [include MT] % (* [class c1 : ... and ... and cn : ...]  /* [class type ct1 = ... and ... and ctn = ...] 렠/* [[\@\@\@id]] Ӡ+* [[%%id]] <* [... [\@\@id1] [\@\@id2]] 0 :* Values of type [module_declaration] represents [S : MT] D<* [... [\@\@id1] [\@\@id2]]  ;* Values of type [module_substitution] represents [S := M] Dߠ<* [... [\@\@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]. DѠ 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]} D U* Values of type [open_description] represents: - [open M.N] - [open M(N).O] D q* Values of type [open_declaration] represents: - [open M.N] - [open M(N).O] - [open struct ... end] D ?* Values of type [include_description] represents [include MT] Dg ?* Values of type [include_declaration] represents [include ME] DO * [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]  e $* [with module type X.Y := sig end]  @ 6* [with type X.t := ..., same format as [Pwith_type]]  9* [with module X.Y := Z]   0* {2 Value expressions for the module language} DI8* [... [\@id1] [\@id2]]  ͠&* [X]  m3* [struct ... end]  U;* [functor(X : MT1) -> ME]  8-* [ME1(ME2)]  .* [(ME : MT)]  ,* [(val E)]  栠** [[%id]]  Ϡ&* [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" ] j '* [type t1 = ... and ... and tn = ...]  G3* [type t1 += ...]  / 9* - [exception C of T] - [exception C = M.X]  2* [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 = ...] x/* [include ME] `/* [[\@\@\@id]] H+* [[%%id]] , =* Values of type [module_binding] represents [module X = ME] DS/* {1 Toplevel} 7* {2 Toplevel phrases} c6* [#use], [#load] ... /@-./boot/ocamlc"-g)-nostdlib"-I$boot*-use-prims2runtime/primitives0-strict-sequence*-principal(-absname"-w>+a-4-9-40-41-42-44-45-48-66-70+-warn-error"+a*-bin-annot,-safe-string/-strict-formats"-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"-cKK */home/barsac/ci/builds/workspace/bootstrap - @0c! L ƶ0KKKKKKKK@K@@J0{EX P8CamlinternalFormatBasics0cEXygc 7پI{YG@0{C 3CK03p雲Ҳ$&Stdlib0>,W:(.Stdlib__Buffer0'ON͋[h#ڗA.Stdlib__Either0 }rCT0J){9).Stdlib__Format0=z+.m׸,Stdlib__Lazy0'rruSZY.Stdlib__Lexing0zsc\ZoQ+Stdlib__Seq0yt\eǟ&Q,}-Stdlib__Uchar0 |K?bޣ ˠ(Warnings0Ӷ.5S6V@03p雲Ҳ$AHEEFF@@F3F6H&H)@E#E&EE@HH@@@GnGq@HiH@FF@EEEEGXGh@GG@@G@GPGG@GG@HJHMHH@FFHTHd@аFF@FFưGyG|HH @FtFw@@EE"II@GGHPHS@EEFYFvFFɰJUJW@FAFDFF@F<F?@@@GmGpH1H4@EEHH@FFFFG7GTH#H3HZH]@@@GG@@F\F_@EEưG^Ga@GG@@@EpEsFF@GG@@@@@E!E1E{E@@@FF@E8E;HH@HMH]@@@EfEvHH*@FPFSGG@@FF@F+F;IRIb@@@EE@@@@P@