123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697openImportmoduletypeIntf=sig[@@@ocaml.text"{2 Value description}"]valvalue_description:loc:Location.t->name:stringloc->type_:core_type->prim:stringlist->value_description[@@ocaml.doc" [value_description] constructs an {! Ast.value_description}\n\n{b Example OCaml}\n\n Values of type {!value_description} represents:\n - [val x: T], when {{!value_description.pval_prim} [pval_prim]} is [[]]\n - [external x: T = \"s1\" ... \"sn\"] when\n {{!value_description.pval_prim} [pval_prim]} is [[\"s1\";...\"sn\"]] "][@@@ocaml.text"{2 Value binding}"]valvalue_binding:loc:Location.t->pat:pattern->expr:expression->constraint_:value_constraintoption->value_binding[@@ocaml.doc" [value_binding] constructs an {! Ast.value_binding}\n\n "][@@@ocaml.text"{2 Type extension}"]valtype_extension:loc:Location.t->path:longidentloc->params:(core_type*(variance*injectivity))list->constructors:extension_constructorlist->private_:private_flag->type_extension[@@ocaml.doc" [type_extension] constructs an {! Ast.type_extension}\n\n{b Example OCaml}\n\n Definition of new extensions constructors for the extensive sum type [t]\n ([type t += ...]). "][@@@ocaml.text"{2 Type exception}"]valtype_exception:loc:Location.t->extension_constructor->type_exception[@@ocaml.doc" [type_exception] constructs an {! Ast.type_exception}\n\n{b Example OCaml}\n\n Definition of a new exception ([exception E]). "][@@@ocaml.text"{2 Type declaration}"]valtype_declaration:loc:Location.t->name:stringloc->params:(core_type*(variance*injectivity))list->cstrs:(core_type*core_type*location)list->kind:type_kind->private_:private_flag->manifest:core_typeoption->type_declaration[@@ocaml.doc" [type_declaration] constructs an {! Ast.type_declaration}\n\n{b Example OCaml}\n\n Here are type declarations and their representation, for various\n {{!type_declaration.ptype_kind} [ptype_kind]} and\n {{!type_declaration.ptype_manifest} [ptype_manifest]} values:\n\n - [type t] when [type_kind] is\n {{!type_kind.Ptype_abstract} [Ptype_abstract]}, and [manifest] is [None],\n - [type t = T0] when [type_kind] is\n {{!type_kind.Ptype_abstract} [Ptype_abstract]}, and [manifest] is\n [Some T0],\n - [type t = C of T | ...] when [type_kind] is\n {{!type_kind.Ptype_variant} [Ptype_variant]}, and [manifest] is [None],\n - [type t = T0 = C of T | ...] when [type_kind] is\n {{!type_kind.Ptype_variant} [Ptype_variant]}, and [manifest] is [Some T0],\n - [type t = {l: T; ...}] when [type_kind] is\n {{!type_kind.Ptype_record} [Ptype_record]}, and [manifest] is [None],\n - [type t = T0 = {l : T; ...}] when [type_kind] is\n {{!type_kind.Ptype_record} [Ptype_record]}, and [manifest] is [Some T0],\n - [type t = ..] when [type_kind] is {{!type_kind.Ptype_open} [Ptype_open]},\n and [manifest] is [None]. "][@@@ocaml.text"{2 Toplevel directive}"]valtoplevel_directive:loc:Location.t->name:stringloc->arg:directive_argumentoption->toplevel_directive[@@ocaml.doc" [toplevel_directive] constructs an {! Ast.toplevel_directive}\n\n "][@@@ocaml.text"{2 Structure item}"]valpstr_extension:loc:Location.t->extension->attributes->structure_item[@@ocaml.doc" [pstr_extension] constructs an {! Ast.Pstr_extension}\n\n{b Example OCaml}\n\n [[%%id]] "]valpstr_attribute:loc:Location.t->attribute->structure_item[@@ocaml.doc" [pstr_attribute] constructs an {! Ast.Pstr_attribute}\n\n{b Example OCaml}\n\n [[\\@\\@\\@id]] "]valpstr_include:loc:Location.t->include_declaration->structure_item[@@ocaml.doc" [pstr_include] constructs an {! Ast.Pstr_include}\n\n{b Example OCaml}\n\n [include ME] "]valpstr_class_type:loc:Location.t->class_type_declarationlist->structure_item[@@ocaml.doc" [pstr_class_type] constructs an {! Ast.Pstr_class_type}\n\n{b Example OCaml}\n\n [class type ct1 = ... and ... and ctn = ...] "]valpstr_class:loc:Location.t->class_declarationlist->structure_item[@@ocaml.doc" [pstr_class] constructs an {! Ast.Pstr_class}\n\n{b Example OCaml}\n\n [class c1 = ... and ... and cn = ...] "]valpstr_open:loc:Location.t->open_declaration->structure_item[@@ocaml.doc" [pstr_open] constructs an {! Ast.Pstr_open}\n\n{b Example OCaml}\n\n [open X] "]valpstr_modtype:loc:Location.t->module_type_declaration->structure_item[@@ocaml.doc" [pstr_modtype] constructs an {! Ast.Pstr_modtype}\n\n{b Example OCaml}\n\n [module type S = MT] "]valpstr_recmodule:loc:Location.t->module_bindinglist->structure_item[@@ocaml.doc" [pstr_recmodule] constructs an {! Ast.Pstr_recmodule}\n\n{b Example OCaml}\n\n [module rec X1 = ME1 and ... and Xn = MEn] "]valpstr_module:loc:Location.t->module_binding->structure_item[@@ocaml.doc" [pstr_module] constructs an {! Ast.Pstr_module}\n\n{b Example OCaml}\n\n [module X = ME] "]valpstr_exception:loc:Location.t->type_exception->structure_item[@@ocaml.doc" [pstr_exception] constructs an {! Ast.Pstr_exception}\n\n{b Example OCaml}\n\n - [exception C of T]\n - [exception C = M.X] "]valpstr_typext:loc:Location.t->type_extension->structure_item[@@ocaml.doc" [pstr_typext] constructs an {! Ast.Pstr_typext}\n\n{b Example OCaml}\n\n [type t1 += ...] "]valpstr_type:loc:Location.t->rec_flag->type_declarationlist->structure_item[@@ocaml.doc" [pstr_type] constructs an {! Ast.Pstr_type}\n\n{b Example OCaml}\n\n [type t1 = ... and ... and tn = ...] "]valpstr_primitive:loc:Location.t->value_description->structure_item[@@ocaml.doc" [pstr_primitive] constructs an {! Ast.Pstr_primitive}\n\n{b Example OCaml}\n\n - [val x: T]\n - [external x: T = \"s1\" ... \"sn\" ] "]valpstr_value:loc:Location.t->rec_flag->value_bindinglist->structure_item[@@ocaml.doc" [pstr_value] constructs an {! Ast.Pstr_value}\n\n{b Example OCaml}\n\n [Pstr_value(rec, [(P1, E1 ; ... ; (Pn, En))])] represents:\n - [let P1 = E1 and ... and Pn = EN] when [rec] is\n {{!Asttypes.rec_flag.Nonrecursive} [Nonrecursive]},\n - [let rec P1 = E1 and ... and Pn = EN ] when [rec] is\n {{!Asttypes.rec_flag.Recursive} [Recursive]}. "]valpstr_eval:loc:Location.t->expression->attributes->structure_item[@@ocaml.doc" [pstr_eval] constructs an {! Ast.Pstr_eval}\n\n{b Example OCaml}\n\n [E] "][@@@ocaml.text"{2 Signature item}"]valpsig_extension:loc:Location.t->extension->attributes->signature_item[@@ocaml.doc" [psig_extension] constructs an {! Ast.Psig_extension}\n\n{b Example OCaml}\n\n [[%%id]] "]valpsig_attribute:loc:Location.t->attribute->signature_item[@@ocaml.doc" [psig_attribute] constructs an {! Ast.Psig_attribute}\n\n{b Example OCaml}\n\n [[\\@\\@\\@id]] "]valpsig_class_type:loc:Location.t->class_type_declarationlist->signature_item[@@ocaml.doc" [psig_class_type] constructs an {! Ast.Psig_class_type}\n\n{b Example OCaml}\n\n [class type ct1 = ... and ... and ctn = ...] "]valpsig_class:loc:Location.t->class_descriptionlist->signature_item[@@ocaml.doc" [psig_class] constructs an {! Ast.Psig_class}\n\n{b Example OCaml}\n\n [class c1 : ... and ... and cn : ...] "]valpsig_include:loc:Location.t->include_description->signature_item[@@ocaml.doc" [psig_include] constructs an {! Ast.Psig_include}\n\n{b Example OCaml}\n\n [include MT] "]valpsig_open:loc:Location.t->open_description->signature_item[@@ocaml.doc" [psig_open] constructs an {! Ast.Psig_open}\n\n{b Example OCaml}\n\n [open X] "]valpsig_modtypesubst:loc:Location.t->module_type_declaration->signature_item[@@ocaml.doc" [psig_modtypesubst] constructs an {! Ast.Psig_modtypesubst}\n\n{b Example OCaml}\n\n [module type S := ...] "]valpsig_modtype:loc:Location.t->module_type_declaration->signature_item[@@ocaml.doc" [psig_modtype] constructs an {! Ast.Psig_modtype}\n\n{b Example OCaml}\n\n [module type S = MT] and [module type S] "]valpsig_recmodule:loc:Location.t->module_declarationlist->signature_item[@@ocaml.doc" [psig_recmodule] constructs an {! Ast.Psig_recmodule}\n\n{b Example OCaml}\n\n [module rec X1 : MT1 and ... and Xn : MTn] "]valpsig_modsubst:loc:Location.t->module_substitution->signature_item[@@ocaml.doc" [psig_modsubst] constructs an {! Ast.Psig_modsubst}\n\n{b Example OCaml}\n\n [module X := M] "]valpsig_module:loc:Location.t->module_declaration->signature_item[@@ocaml.doc" [psig_module] constructs an {! Ast.Psig_module}\n\n{b Example OCaml}\n\n [module X = M] and [module X : MT] "]valpsig_exception:loc:Location.t->type_exception->signature_item[@@ocaml.doc" [psig_exception] constructs an {! Ast.Psig_exception}\n\n{b Example OCaml}\n\n [exception C of T] "]valpsig_typext:loc:Location.t->type_extension->signature_item[@@ocaml.doc" [psig_typext] constructs an {! Ast.Psig_typext}\n\n{b Example OCaml}\n\n [type t1 += ...] "]valpsig_typesubst:loc:Location.t->type_declarationlist->signature_item[@@ocaml.doc" [psig_typesubst] constructs an {! Ast.Psig_typesubst}\n\n{b Example OCaml}\n\n [type t1 := ... and ... and tn := ...] "]valpsig_type:loc:Location.t->rec_flag->type_declarationlist->signature_item[@@ocaml.doc" [psig_type] constructs an {! Ast.Psig_type}\n\n{b Example OCaml}\n\n [type t1 = ... and ... and tn = ...] "]valpsig_value:loc:Location.t->value_description->signature_item[@@ocaml.doc" [psig_value] constructs an {! Ast.Psig_value}\n\n{b Example OCaml}\n\n - [val x: T]\n - [external x: T = \"s1\" ... \"sn\"] "][@@@ocaml.text"{2 Row field}"]valrinherit:loc:Location.t->core_type->row_field[@@ocaml.doc" [rinherit] constructs an {! Ast.Rinherit}\n\n{b Example OCaml}\n\n [[ | t ]] "]valrtag:loc:Location.t->labelloc->bool->core_typelist->row_field[@@ocaml.doc" [rtag] constructs an {! Ast.Rtag}\n\n{b Example OCaml}\n\n [Rtag(`A, b, l)] represents:\n - [`A] when [b] is [true] and [l] is [[]],\n - [`A of T] when [b] is [false] and [l] is [[T]],\n - [`A of T1 & .. & Tn] when [b] is [false] and [l] is [[T1;...Tn]],\n - [`A of & T1 & .. & Tn] when [b] is [true] and [l] is [[T1;...Tn]].\n\n - The [bool] field is true if the tag contains a constant (empty)\n constructor.\n - [&] occurs when several types are used for the same constructor (see\n 4.2 in the manual) "][@@@ocaml.text"{2 Position}"]valposition:fname:string->lnum:int->bol:int->cnum:int->position[@@ocaml.doc" [position] constructs an {! Ast.position}\n\n "][@@@ocaml.text"{2 Pattern}"]valppat_open:loc:Location.t->longidentloc->pattern->pattern[@@ocaml.doc" [ppat_open] constructs an {! Ast.Ppat_open}\n\n{b Example OCaml}\n\n Pattern [M.(P)] "]valppat_extension:loc:Location.t->extension->pattern[@@ocaml.doc" [ppat_extension] constructs an {! Ast.Ppat_extension}\n\n{b Example OCaml}\n\n Pattern [[%id]] "]valppat_exception:loc:Location.t->pattern->pattern[@@ocaml.doc" [ppat_exception] constructs an {! Ast.Ppat_exception}\n\n{b Example OCaml}\n\n Pattern [exception P] "]valppat_unpack:loc:Location.t->stringoptionloc->pattern[@@ocaml.doc" [ppat_unpack] constructs an {! Ast.Ppat_unpack}\n\n{b Example OCaml}\n\n [Ppat_unpack(s)] represents:\n - [(module P)] when [s] is [Some \"P\"]\n - [(module _)] when [s] is [None]\n\n Note: [(module P : S)] is represented as\n [Ppat_constraint(Ppat_unpack(Some \"P\"), Ptyp_package S)] "]valppat_lazy:loc:Location.t->pattern->pattern[@@ocaml.doc" [ppat_lazy] constructs an {! Ast.Ppat_lazy}\n\n{b Example OCaml}\n\n Pattern [lazy P] "]valppat_type:loc:Location.t->longidentloc->pattern[@@ocaml.doc" [ppat_type] constructs an {! Ast.Ppat_type}\n\n{b Example OCaml}\n\n Pattern [#tconst] "]valppat_constraint:loc:Location.t->pattern->core_type->pattern[@@ocaml.doc" [ppat_constraint] constructs an {! Ast.Ppat_constraint}\n\n{b Example OCaml}\n\n Pattern [(P : T)] "]valppat_or:loc:Location.t->pattern->pattern->pattern[@@ocaml.doc" [ppat_or] constructs an {! Ast.Ppat_or}\n\n{b Example OCaml}\n\n Pattern [P1 | P2] "]valppat_array:loc:Location.t->patternlist->pattern[@@ocaml.doc" [ppat_array] constructs an {! Ast.Ppat_array}\n\n{b Example OCaml}\n\n Pattern [[| P1; ...; Pn |]] "]valppat_record:loc:Location.t->(longidentloc*pattern)list->closed_flag->pattern[@@ocaml.doc" [ppat_record] constructs an {! Ast.Ppat_record}\n\n{b Example OCaml}\n\n [Ppat_record([(l1, P1) ; ... ; (ln, Pn)], flag)] represents:\n - [{ l1=P1; ...; ln=Pn }] when [flag] is\n {{!Asttypes.closed_flag.Closed} [Closed]}\n - [{ l1=P1; ...; ln=Pn; _}] when [flag] is\n {{!Asttypes.closed_flag.Open} [Open]}\n\n Invariant: [n > 0] "]valppat_variant:loc:Location.t->label->patternoption->pattern[@@ocaml.doc" [ppat_variant] constructs an {! Ast.Ppat_variant}\n\n{b Example OCaml}\n\n [Ppat_variant(`A, pat)] represents:\n - [`A] when [pat] is [None],\n - [`A P] when [pat] is [Some P] "]valppat_construct:loc:Location.t->longidentloc->(stringloclist*pattern)option->pattern[@@ocaml.doc" [ppat_construct] constructs an {! Ast.Ppat_construct}\n\n{b Example OCaml}\n\n [Ppat_construct(C, args)] represents:\n - [C] when [args] is [None],\n - [C P] when [args] is [Some ([], P)]\n - [C (P1, ..., Pn)] when [args] is\n [Some ([], Ppat_tuple [P1; ...; Pn])]\n - [C (type a b) P] when [args] is [Some ([a; b], P)] "]valppat_tuple:loc:Location.t->patternlist->pattern[@@ocaml.doc" [ppat_tuple] constructs an {! Ast.Ppat_tuple}\n\n{b Example OCaml}\n\n Patterns [(P1, ..., Pn)].\n\n Invariant: [n >= 2] "]valppat_interval:loc:Location.t->constant->constant->pattern[@@ocaml.doc" [ppat_interval] constructs an {! Ast.Ppat_interval}\n\n{b Example OCaml}\n\n Patterns such as ['a'..'z'].\n\n Other forms of interval are recognized by the parser but rejected by\n the type-checker. "]valppat_constant:loc:Location.t->constant->pattern[@@ocaml.doc" [ppat_constant] constructs an {! Ast.Ppat_constant}\n\n{b Example OCaml}\n\n Patterns such as [1], ['a'], [\"true\"], [1.0], [1l], [1L], [1n] "]valppat_alias:loc:Location.t->pattern->stringloc->pattern[@@ocaml.doc" [ppat_alias] constructs an {! Ast.Ppat_alias}\n\n{b Example OCaml}\n\n An alias pattern such as [P as 'a] "]valppat_var:loc:Location.t->stringloc->pattern[@@ocaml.doc" [ppat_var] constructs an {! Ast.Ppat_var}\n\n{b Example OCaml}\n\n A variable pattern such as [x] "]valppat_any:loc:Location.t->pattern[@@ocaml.doc" [ppat_any] constructs an {! Ast.Ppat_any}\n\n{b Example OCaml}\n\n The pattern [_]. "][@@@ocaml.text"{2 Object field}"]valoinherit:loc:Location.t->core_type->object_field[@@ocaml.doc" [oinherit] constructs an {! Ast.Oinherit}\n\n "]valotag:loc:Location.t->labelloc->core_type->object_field[@@ocaml.doc" [otag] constructs an {! Ast.Otag}\n\n "][@@@ocaml.text"{2 Module type declaration}"]valmodule_type_declaration:loc:Location.t->name:stringloc->type_:module_typeoption->module_type_declaration[@@ocaml.doc" [module_type_declaration] constructs an {! Ast.module_type_declaration}\n\n{b Example OCaml}\n\n Values of type [module_type_declaration] represents:\n - [S = MT],\n - [S] for abstract module type declaration, when\n {{!module_type_declaration.pmtd_type} [pmtd_type]} is [None]. "][@@@ocaml.text"{2 Module type}"]valpmty_alias:loc:Location.t->longidentloc->module_type[@@ocaml.doc" [pmty_alias] constructs an {! Ast.Pmty_alias}\n\n{b Example OCaml}\n\n [(module M)] "]valpmty_extension:loc:Location.t->extension->module_type[@@ocaml.doc" [pmty_extension] constructs an {! Ast.Pmty_extension}\n\n{b Example OCaml}\n\n [[%id]] "]valpmty_typeof:loc:Location.t->module_expr->module_type[@@ocaml.doc" [pmty_typeof] constructs an {! Ast.Pmty_typeof}\n\n{b Example OCaml}\n\n [module type of ME] "]valpmty_with:loc:Location.t->module_type->with_constraintlist->module_type[@@ocaml.doc" [pmty_with] constructs an {! Ast.Pmty_with}\n\n{b Example OCaml}\n\n [MT with ...] "]valpmty_functor:loc:Location.t->functor_parameter->module_type->module_type[@@ocaml.doc" [pmty_functor] constructs an {! Ast.Pmty_functor}\n\n{b Example OCaml}\n\n [functor(X : MT1) -> MT2] "]valpmty_signature:loc:Location.t->signature->module_type[@@ocaml.doc" [pmty_signature] constructs an {! Ast.Pmty_signature}\n\n{b Example OCaml}\n\n [sig ... end] "]valpmty_ident:loc:Location.t->longidentloc->module_type[@@ocaml.doc" [pmty_ident] constructs an {! Ast.Pmty_ident}\n\n{b Example OCaml}\n\n [Pmty_ident(S)] represents [S] "][@@@ocaml.text"{2 Module substitution}"]valmodule_substitution:loc:Location.t->name:stringloc->manifest:longidentloc->module_substitution[@@ocaml.doc" [module_substitution] constructs an {! Ast.module_substitution}\n\n{b Example OCaml}\n\n Values of type [module_substitution] represents [S := M] "][@@@ocaml.text"{2 Module expr}"]valpmod_extension:loc:Location.t->extension->module_expr[@@ocaml.doc" [pmod_extension] constructs an {! Ast.Pmod_extension}\n\n{b Example OCaml}\n\n [[%id]] "]valpmod_unpack:loc:Location.t->expression->module_expr[@@ocaml.doc" [pmod_unpack] constructs an {! Ast.Pmod_unpack}\n\n{b Example OCaml}\n\n [(val E)] "]valpmod_constraint:loc:Location.t->module_expr->module_type->module_expr[@@ocaml.doc" [pmod_constraint] constructs an {! Ast.Pmod_constraint}\n\n{b Example OCaml}\n\n [(ME : MT)] "]valpmod_apply_unit:loc:Location.t->module_expr->module_expr[@@ocaml.doc" [pmod_apply_unit] constructs an {! Ast.Pmod_apply_unit}\n\n{b Example OCaml}\n\n [ME1()] "]valpmod_apply:loc:Location.t->module_expr->module_expr->module_expr[@@ocaml.doc" [pmod_apply] constructs an {! Ast.Pmod_apply}\n\n{b Example OCaml}\n\n [ME1(ME2)] "]valpmod_functor:loc:Location.t->functor_parameter->module_expr->module_expr[@@ocaml.doc" [pmod_functor] constructs an {! Ast.Pmod_functor}\n\n{b Example OCaml}\n\n [functor(X : MT1) -> ME] "]valpmod_structure:loc:Location.t->structure->module_expr[@@ocaml.doc" [pmod_structure] constructs an {! Ast.Pmod_structure}\n\n{b Example OCaml}\n\n [struct ... end] "]valpmod_ident:loc:Location.t->longidentloc->module_expr[@@ocaml.doc" [pmod_ident] constructs an {! Ast.Pmod_ident}\n\n{b Example OCaml}\n\n [X] "][@@@ocaml.text"{2 Module declaration}"]valmodule_declaration:loc:Location.t->name:stringoptionloc->type_:module_type->module_declaration[@@ocaml.doc" [module_declaration] constructs an {! Ast.module_declaration}\n\n{b Example OCaml}\n\n Values of type [module_declaration] represents [S : MT] "][@@@ocaml.text"{2 Module binding}"]valmodule_binding:loc:Location.t->name:stringoptionloc->expr:module_expr->module_binding[@@ocaml.doc" [module_binding] constructs an {! Ast.module_binding}\n\n{b Example OCaml}\n\n Values of type [module_binding] represents [module X = ME] "][@@@ocaml.text"{2 Location}"]vallocation:start:position->end_:position->ghost:bool->location[@@ocaml.doc" [location] constructs an {! Ast.location}\n\n "][@@@ocaml.text"{2 Letop}"]valletop:let_:binding_op->ands:binding_oplist->body:expression->letop[@@ocaml.doc" [letop] constructs an {! Ast.letop}\n\n "][@@@ocaml.text"{2 Label declaration}"]vallabel_declaration:loc:Location.t->name:stringloc->mutable_:mutable_flag->type_:core_type->label_declaration[@@ocaml.doc" [label_declaration] constructs an {! Ast.label_declaration}\n\n{b Example OCaml}\n\n - [{ ...; l: T; ... }] when {{!label_declaration.pld_mutable} [pld_mutable]}\n is {{!Asttypes.mutable_flag.Immutable} [Immutable]},\n - [{ ...; mutable l: T; ... }] when\n {{!label_declaration.pld_mutable} [pld_mutable]} is\n {{!Asttypes.mutable_flag.Mutable} [Mutable]}.\n\n Note: [T] can be a {{!core_type_desc.Ptyp_poly} [Ptyp_poly]}. "][@@@ocaml.text"{2 Function param}"]valpparam_newtype:loc:Location.t->stringloc->function_param[@@ocaml.doc" [pparam_newtype] constructs an {! Ast.Pparam_newtype}\n\n{b Example OCaml}\n\n [Pparam_newtype x] represents the parameter [(type x)]. [x] carries\n the location of the identifier, whereas the [pparam_loc] on the\n enclosing [function_param] node is the location of the [(type x)] as a\n whole.\n\n Multiple parameters [(type a b c)] are represented as multiple\n [Pparam_newtype] nodes, let's say:\n\n {[\n [\n { pparam_kind = Pparam_newtype a; pparam_loc = loc1 };\n { pparam_kind = Pparam_newtype b; pparam_loc = loc2 };\n { pparam_kind = Pparam_newtype c; pparam_loc = loc3 };\n ]\n ]}\n\n Here, the first loc [loc1] is the location of [(type a b c)], and the\n subsequent locs [loc2] and [loc3] are the same as [loc1], except\n marked as ghost locations. The locations on [a], [b], [c], correspond\n to the variables [a], [b], and [c] in the source code. "]valpparam_val:loc:Location.t->arg_label->expressionoption->pattern->function_param[@@ocaml.doc" [pparam_val] constructs an {! Ast.Pparam_val}\n\n{b Example OCaml}\n\n [Pparam_val (lbl, exp0, P)] represents the parameter:\n - [P] when [lbl] is {{!Asttypes.arg_label.Nolabel} [Nolabel]} and\n [exp0] is [None]\n - [~l:P] when [lbl] is {{!Asttypes.arg_label.Labelled} [Labelled l]}\n and [exp0] is [None]\n - [?l:P] when [lbl] is {{!Asttypes.arg_label.Optional} [Optional l]}\n and [exp0] is [None]\n - [?l:(P = E0)] when [lbl] is\n {{!Asttypes.arg_label.Optional} [Optional l]} and [exp0] is\n [Some E0]\n\n Note: If [E0] is provided, only\n {{!Asttypes.arg_label.Optional} [Optional]} is allowed. "][@@@ocaml.text"{2 Extension constructor}"]valextension_constructor:loc:Location.t->name:stringloc->kind:extension_constructor_kind->extension_constructor[@@ocaml.doc" [extension_constructor] constructs an {! Ast.extension_constructor}\n\n "][@@@ocaml.text"{2 Expression}"]valpexp_unreachable:loc:Location.t->expression[@@ocaml.doc" [pexp_unreachable] constructs an {! Ast.Pexp_unreachable}\n\n{b Example OCaml}\n\n [.] "]valpexp_extension:loc:Location.t->extension->expression[@@ocaml.doc" [pexp_extension] constructs an {! Ast.Pexp_extension}\n\n{b Example OCaml}\n\n [[%id]] "]valpexp_letop:loc:Location.t->letop->expression[@@ocaml.doc" [pexp_letop] constructs an {! Ast.Pexp_letop}\n\n{b Example OCaml}\n\n - [let* P = E0 in E1]\n - [let* P0 = E00 and* P1 = E01 in E1] "]valpexp_open:loc:Location.t->open_declaration->expression->expression[@@ocaml.doc" [pexp_open] constructs an {! Ast.Pexp_open}\n\n{b Example OCaml}\n\n - [M.(E)]\n - [let open M in E]\n - [let open! M in E] "]valpexp_pack:loc:Location.t->module_expr->expression[@@ocaml.doc" [pexp_pack] constructs an {! Ast.Pexp_pack}\n\n{b Example OCaml}\n\n [(module ME)].\n\n [(module ME : S)] is represented as\n [Pexp_constraint(Pexp_pack ME, Ptyp_package S)] "]valpexp_newtype:loc:Location.t->stringloc->expression->expression[@@ocaml.doc" [pexp_newtype] constructs an {! Ast.Pexp_newtype}\n\n{b Example OCaml}\n\n [fun (type t) -> E] "]valpexp_object:loc:Location.t->class_structure->expression[@@ocaml.doc" [pexp_object] constructs an {! Ast.Pexp_object}\n\n{b Example OCaml}\n\n [object ... end] "]valpexp_poly:loc:Location.t->expression->core_typeoption->expression[@@ocaml.doc" [pexp_poly] constructs an {! Ast.Pexp_poly}\n\n{b Example OCaml}\n\n Used for method bodies.\n\n Can only be used as the expression under\n {{!class_field_kind.Cfk_concrete} [Cfk_concrete]} for methods (not\n values). "]valpexp_lazy:loc:Location.t->expression->expression[@@ocaml.doc" [pexp_lazy] constructs an {! Ast.Pexp_lazy}\n\n{b Example OCaml}\n\n [lazy E] "]valpexp_assert:loc:Location.t->expression->expression[@@ocaml.doc" [pexp_assert] constructs an {! Ast.Pexp_assert}\n\n{b Example OCaml}\n\n [assert E].\n\n Note: [assert false] is treated in a special way by the type-checker.\n "]valpexp_letexception:loc:Location.t->extension_constructor->expression->expression[@@ocaml.doc" [pexp_letexception] constructs an {! Ast.Pexp_letexception}\n\n{b Example OCaml}\n\n [let exception C in E] "]valpexp_letmodule:loc:Location.t->stringoptionloc->module_expr->expression->expression[@@ocaml.doc" [pexp_letmodule] constructs an {! Ast.Pexp_letmodule}\n\n{b Example OCaml}\n\n [let module M = ME in E] "]valpexp_override:loc:Location.t->(labelloc*expression)list->expression[@@ocaml.doc" [pexp_override] constructs an {! Ast.Pexp_override}\n\n{b Example OCaml}\n\n [{< x1 = E1; ...; xn = En >}] "]valpexp_setinstvar:loc:Location.t->labelloc->expression->expression[@@ocaml.doc" [pexp_setinstvar] constructs an {! Ast.Pexp_setinstvar}\n\n{b Example OCaml}\n\n [x <- 2] "]valpexp_new:loc:Location.t->longidentloc->expression[@@ocaml.doc" [pexp_new] constructs an {! Ast.Pexp_new}\n\n{b Example OCaml}\n\n [new M.c] "]valpexp_send:loc:Location.t->expression->labelloc->expression[@@ocaml.doc" [pexp_send] constructs an {! Ast.Pexp_send}\n\n{b Example OCaml}\n\n [E # m] "]valpexp_coerce:loc:Location.t->expression->core_typeoption->core_type->expression[@@ocaml.doc" [pexp_coerce] constructs an {! Ast.Pexp_coerce}\n\n{b Example OCaml}\n\n [Pexp_coerce(E, from, T)] represents\n - [(E :> T)] when [from] is [None],\n - [(E : T0 :> T)] when [from] is [Some T0]. "]valpexp_constraint:loc:Location.t->expression->core_type->expression[@@ocaml.doc" [pexp_constraint] constructs an {! Ast.Pexp_constraint}\n\n{b Example OCaml}\n\n [(E : T)] "]valpexp_for:loc:Location.t->pattern->expression->expression->direction_flag->expression->expression[@@ocaml.doc" [pexp_for] constructs an {! Ast.Pexp_for}\n\n{b Example OCaml}\n\n [Pexp_for(i, E1, E2, direction, E3)] represents:\n - [for i = E1 to E2 do E3 done] when [direction] is\n {{!Asttypes.direction_flag.Upto} [Upto]}\n - [for i = E1 downto E2 do E3 done] when [direction] is\n {{!Asttypes.direction_flag.Downto} [Downto]} "]valpexp_while:loc:Location.t->expression->expression->expression[@@ocaml.doc" [pexp_while] constructs an {! Ast.Pexp_while}\n\n{b Example OCaml}\n\n [while E1 do E2 done] "]valpexp_sequence:loc:Location.t->expression->expression->expression[@@ocaml.doc" [pexp_sequence] constructs an {! Ast.Pexp_sequence}\n\n{b Example OCaml}\n\n [E1; E2] "]valpexp_ifthenelse:loc:Location.t->expression->expression->expressionoption->expression[@@ocaml.doc" [pexp_ifthenelse] constructs an {! Ast.Pexp_ifthenelse}\n\n{b Example OCaml}\n\n [if E1 then E2 else E3] "]valpexp_array:loc:Location.t->expressionlist->expression[@@ocaml.doc" [pexp_array] constructs an {! Ast.Pexp_array}\n\n{b Example OCaml}\n\n [[| E1; ...; En |]] "]valpexp_setfield:loc:Location.t->expression->longidentloc->expression->expression[@@ocaml.doc" [pexp_setfield] constructs an {! Ast.Pexp_setfield}\n\n{b Example OCaml}\n\n [E1.l <- E2] "]valpexp_field:loc:Location.t->expression->longidentloc->expression[@@ocaml.doc" [pexp_field] constructs an {! Ast.Pexp_field}\n\n{b Example OCaml}\n\n [E.l] "]valpexp_record:loc:Location.t->(longidentloc*expression)list->expressionoption->expression[@@ocaml.doc" [pexp_record] constructs an {! Ast.Pexp_record}\n\n{b Example OCaml}\n\n [Pexp_record([(l1,P1) ; ... ; (ln,Pn)], exp0)] represents\n - [{ l1=P1; ...; ln=Pn }] when [exp0] is [None]\n - [{ E0 with l1=P1; ...; ln=Pn }] when [exp0] is [Some E0]\n\n Invariant: [n > 0] "]valpexp_variant:loc:Location.t->label->expressionoption->expression[@@ocaml.doc" [pexp_variant] constructs an {! Ast.Pexp_variant}\n\n{b Example OCaml}\n\n [Pexp_variant(`A, exp)] represents\n - [`A] when [exp] is [None]\n - [`A E] when [exp] is [Some E] "]valpexp_construct:loc:Location.t->longidentloc->expressionoption->expression[@@ocaml.doc" [pexp_construct] constructs an {! Ast.Pexp_construct}\n\n{b Example OCaml}\n\n [Pexp_construct(C, exp)] represents:\n - [C] when [exp] is [None],\n - [C E] when [exp] is [Some E],\n - [C (E1, ..., En)] when [exp] is [Some (Pexp_tuple[E1;...;En])] "]valpexp_tuple:loc:Location.t->expressionlist->expression[@@ocaml.doc" [pexp_tuple] constructs an {! Ast.Pexp_tuple}\n\n{b Example OCaml}\n\n Expressions [(E1, ..., En)]\n\n Invariant: [n >= 2] "]valpexp_try:loc:Location.t->expression->cases->expression[@@ocaml.doc" [pexp_try] constructs an {! Ast.Pexp_try}\n\n{b Example OCaml}\n\n [try E0 with P1 -> E1 | ... | Pn -> En] "]valpexp_match:loc:Location.t->expression->cases->expression[@@ocaml.doc" [pexp_match] constructs an {! Ast.Pexp_match}\n\n{b Example OCaml}\n\n [match E0 with P1 -> E1 | ... | Pn -> En] "]valpexp_apply:loc:Location.t->expression->(arg_label*expression)list->expression[@@ocaml.doc" [pexp_apply] constructs an {! Ast.Pexp_apply}\n\n{b Example OCaml}\n\n [Pexp_apply(E0, [(l1, E1) ; ... ; (ln, En)])] represents\n [E0 ~l1:E1 ... ~ln:En]\n\n [li] can be {{!Asttypes.arg_label.Nolabel} [Nolabel]} (non labeled\n argument), {{!Asttypes.arg_label.Labelled} [Labelled]} (labelled\n arguments) or {{!Asttypes.arg_label.Optional} [Optional]} (optional\n argument).\n\n Invariant: [n > 0] "]valpexp_function:loc:Location.t->function_paramlist->type_constraintoption->function_body->expression[@@ocaml.doc" [pexp_function] constructs an {! Ast.Pexp_function}\n\n{b Example OCaml}\n\n [Pexp_function ([P1; ...; Pn], C, body)] represents any construct\n involving [fun] or [function], including:\n - [fun P1 ... Pn -> E] when [body = Pfunction_body E]\n - [fun P1 ... Pn -> function p1 -> e1 | ... | pm -> em] when\n [body = Pfunction_cases [ p1 -> e1; ...; pm -> em ]] [C] represents\n a type constraint or coercion placed immediately before the arrow,\n e.g. [fun P1 ... Pn : ty -> ...] when [C = Some (Pconstraint ty)]. A\n function must have parameters. [Pexp_function (params, _, body)]\n must have non-empty [params] or a [Pfunction_cases _] body. "]valpexp_let:loc:Location.t->rec_flag->value_bindinglist->expression->expression[@@ocaml.doc" [pexp_let] constructs an {! Ast.Pexp_let}\n\n{b Example OCaml}\n\n [Pexp_let(flag, [(P1,E1) ; ... ; (Pn,En)], E)] represents:\n - [let P1 = E1 and ... and Pn = EN in E] when [flag] is\n {{!Asttypes.rec_flag.Nonrecursive} [Nonrecursive]},\n - [let rec P1 = E1 and ... and Pn = EN in E] when [flag] is\n {{!Asttypes.rec_flag.Recursive} [Recursive]}. "]valpexp_constant:loc:Location.t->constant->expression[@@ocaml.doc" [pexp_constant] constructs an {! Ast.Pexp_constant}\n\n{b Example OCaml}\n\n Expressions constant such as [1], ['a'], [\"true\"], [1.0], [1l], [1L],\n [1n] "]valpexp_ident:loc:Location.t->longidentloc->expression[@@ocaml.doc" [pexp_ident] constructs an {! Ast.Pexp_ident}\n\n{b Example OCaml}\n\n Identifiers such as [x] and [M.x] "][@@@ocaml.text"{2 Directive argument}"]valpdir_bool:loc:Location.t->bool->directive_argument[@@ocaml.doc" [pdir_bool] constructs an {! Ast.Pdir_bool}\n\n "]valpdir_ident:loc:Location.t->longident->directive_argument[@@ocaml.doc" [pdir_ident] constructs an {! Ast.Pdir_ident}\n\n "]valpdir_int:loc:Location.t->string->charoption->directive_argument[@@ocaml.doc" [pdir_int] constructs an {! Ast.Pdir_int}\n\n "]valpdir_string:loc:Location.t->string->directive_argument[@@ocaml.doc" [pdir_string] constructs an {! Ast.Pdir_string}\n\n "][@@@ocaml.text"{2 Core type}"]valptyp_extension:loc:Location.t->extension->core_type[@@ocaml.doc" [ptyp_extension] constructs an {! Ast.Ptyp_extension}\n\n{b Example OCaml}\n\n [[%id]]. "]valptyp_open:loc:Location.t->longidentloc->core_type->core_type[@@ocaml.doc" [ptyp_open] constructs an {! Ast.Ptyp_open}\n\n{b Example OCaml}\n\n [M.(T)] "]valptyp_package:loc:Location.t->package_type->core_type[@@ocaml.doc" [ptyp_package] constructs an {! Ast.Ptyp_package}\n\n{b Example OCaml}\n\n [(module S)]. "]valptyp_poly:loc:Location.t->stringloclist->core_type->core_type[@@ocaml.doc" [ptyp_poly] constructs an {! Ast.Ptyp_poly}\n\n{b Example OCaml}\n\n ['a1 ... 'an. T]\n\n Can only appear in the following context:\n\n - As the {!core_type} of a\n {{!pattern_desc.Ppat_constraint} [Ppat_constraint]} node\n corresponding to a constraint on a let-binding:\n\n {[\n let x : 'a1 ... 'an. T = e ...\n ]}\n - Under {{!class_field_kind.Cfk_virtual} [Cfk_virtual]} for methods\n (not values).\n\n - As the {!core_type} of a\n {{!class_type_field_desc.Pctf_method} [Pctf_method]} node.\n\n - As the {!core_type} of a {{!expression_desc.Pexp_poly} [Pexp_poly]}\n node.\n\n - As the {{!label_declaration.pld_type} [pld_type]} field of a\n {!label_declaration}.\n\n - As a {!core_type} of a {{!core_type_desc.Ptyp_object} [Ptyp_object]}\n node.\n\n - As the {{!value_description.pval_type} [pval_type]} field of a\n {!value_description}. "]valptyp_variant:loc:Location.t->row_fieldlist->closed_flag->labellistoption->core_type[@@ocaml.doc" [ptyp_variant] constructs an {! Ast.Ptyp_variant}\n\n{b Example OCaml}\n\n [Ptyp_variant([`A;`B], flag, labels)] represents:\n - [[ `A|`B ]] when [flag] is\n {{!Asttypes.closed_flag.Closed} [Closed]}, and [labels] is [None],\n - [[> `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Open} [Open]},\n and [labels] is [None],\n - [[< `A|`B ]] when [flag] is\n {{!Asttypes.closed_flag.Closed} [Closed]}, and [labels] is\n [Some []],\n - [[< `A|`B > `X `Y ]] when [flag] is\n {{!Asttypes.closed_flag.Closed} [Closed]}, and [labels] is\n [Some [\"X\";\"Y\"]]. "]valptyp_alias:loc:Location.t->core_type->stringloc->core_type[@@ocaml.doc" [ptyp_alias] constructs an {! Ast.Ptyp_alias}\n\n{b Example OCaml}\n\n [T as 'a]. "]valptyp_class:loc:Location.t->longidentloc->core_typelist->core_type[@@ocaml.doc" [ptyp_class] constructs an {! Ast.Ptyp_class}\n\n{b Example OCaml}\n\n [Ptyp_class(tconstr, l)] represents:\n - [#tconstr] when [l=[]],\n - [T #tconstr] when [l=[T]],\n - [(T1, ..., Tn) #tconstr] when [l=[T1 ; ... ; Tn]]. "]valptyp_object:loc:Location.t->object_fieldlist->closed_flag->core_type[@@ocaml.doc" [ptyp_object] constructs an {! Ast.Ptyp_object}\n\n{b Example OCaml}\n\n [Ptyp_object([ l1:T1; ...; ln:Tn ], flag)] represents:\n - [< l1:T1; ...; ln:Tn >] when [flag] is\n {{!Asttypes.closed_flag.Closed} [Closed]},\n - [< l1:T1; ...; ln:Tn; .. >] when [flag] is\n {{!Asttypes.closed_flag.Open} [Open]}. "]valptyp_constr:loc:Location.t->longidentloc->core_typelist->core_type[@@ocaml.doc" [ptyp_constr] constructs an {! Ast.Ptyp_constr}\n\n{b Example OCaml}\n\n [Ptyp_constr(lident, l)] represents:\n - [tconstr] when [l=[]],\n - [T tconstr] when [l=[T]],\n - [(T1, ..., Tn) tconstr] when [l=[T1 ; ... ; Tn]]. "]valptyp_tuple:loc:Location.t->core_typelist->core_type[@@ocaml.doc" [ptyp_tuple] constructs an {! Ast.Ptyp_tuple}\n\n{b Example OCaml}\n\n [Ptyp_tuple([T1 ; ... ; Tn])] represents a product type\n [T1 * ... * Tn].\n\n Invariant: [n >= 2]. "]valptyp_arrow:loc:Location.t->arg_label->core_type->core_type->core_type[@@ocaml.doc" [ptyp_arrow] constructs an {! Ast.Ptyp_arrow}\n\n{b Example OCaml}\n\n [Ptyp_arrow(lbl, T1, T2)] represents:\n - [T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Nolabel} [Nolabel]},\n - [~l:T1 -> T2] when [lbl] is\n {{!Asttypes.arg_label.Labelled} [Labelled]},\n - [?l:T1 -> T2] when [lbl] is\n {{!Asttypes.arg_label.Optional} [Optional]}. "]valptyp_var:loc:Location.t->string->core_type[@@ocaml.doc" [ptyp_var] constructs an {! Ast.Ptyp_var}\n\n{b Example OCaml}\n\n A type variable such as ['a] "]valptyp_any:loc:Location.t->core_type[@@ocaml.doc" [ptyp_any] constructs an {! Ast.Ptyp_any}\n\n{b Example OCaml}\n\n [_] "][@@@ocaml.text"{2 Constructor declaration}"]valconstructor_declaration:loc:Location.t->name:stringloc->vars:stringloclist->args:constructor_arguments->res:core_typeoption->constructor_declaration[@@ocaml.doc" [constructor_declaration] constructs an {! Ast.constructor_declaration}\n\n "][@@@ocaml.text"{2 Class type field}"]valpctf_extension:loc:Location.t->extension->class_type_field[@@ocaml.doc" [pctf_extension] constructs an {! Ast.Pctf_extension}\n\n{b Example OCaml}\n\n [[%%id]] "]valpctf_attribute:loc:Location.t->attribute->class_type_field[@@ocaml.doc" [pctf_attribute] constructs an {! Ast.Pctf_attribute}\n\n{b Example OCaml}\n\n [[\\@\\@\\@id]] "]valpctf_constraint:loc:Location.t->(core_type*core_type)->class_type_field[@@ocaml.doc" [pctf_constraint] constructs an {! Ast.Pctf_constraint}\n\n{b Example OCaml}\n\n [constraint T1 = T2] "]valpctf_method:loc:Location.t->(labelloc*private_flag*virtual_flag*core_type)->class_type_field[@@ocaml.doc" [pctf_method] constructs an {! Ast.Pctf_method}\n\n{b Example OCaml}\n\n [method x: T]\n\n Note: [T] can be a {{!core_type_desc.Ptyp_poly} [Ptyp_poly]}. "]valpctf_val:loc:Location.t->(labelloc*mutable_flag*virtual_flag*core_type)->class_type_field[@@ocaml.doc" [pctf_val] constructs an {! Ast.Pctf_val}\n\n{b Example OCaml}\n\n [val x: T] "]valpctf_inherit:loc:Location.t->class_type->class_type_field[@@ocaml.doc" [pctf_inherit] constructs an {! Ast.Pctf_inherit}\n\n{b Example OCaml}\n\n [inherit CT] "][@@@ocaml.text"{2 Class type}"]valpcty_open:loc:Location.t->open_description->class_type->class_type[@@ocaml.doc" [pcty_open] constructs an {! Ast.Pcty_open}\n\n{b Example OCaml}\n\n [let open M in CT] "]valpcty_extension:loc:Location.t->extension->class_type[@@ocaml.doc" [pcty_extension] constructs an {! Ast.Pcty_extension}\n\n{b Example OCaml}\n\n [%id] "]valpcty_arrow:loc:Location.t->arg_label->core_type->class_type->class_type[@@ocaml.doc" [pcty_arrow] constructs an {! Ast.Pcty_arrow}\n\n{b Example OCaml}\n\n [Pcty_arrow(lbl, T, CT)] represents:\n - [T -> CT] when [lbl] is {{!Asttypes.arg_label.Nolabel} [Nolabel]},\n - [~l:T -> CT] when [lbl] is\n {{!Asttypes.arg_label.Labelled} [Labelled l]},\n - [?l:T -> CT] when [lbl] is\n {{!Asttypes.arg_label.Optional} [Optional l]}. "]valpcty_signature:loc:Location.t->class_signature->class_type[@@ocaml.doc" [pcty_signature] constructs an {! Ast.Pcty_signature}\n\n{b Example OCaml}\n\n [object ... end] "]valpcty_constr:loc:Location.t->longidentloc->core_typelist->class_type[@@ocaml.doc" [pcty_constr] constructs an {! Ast.Pcty_constr}\n\n{b Example OCaml}\n\n - [c]\n - [['a1, ..., 'an] c] "][@@@ocaml.text"{2 Class structure}"]valclass_structure:self:pattern->fields:class_fieldlist->class_structure[@@ocaml.doc" [class_structure] constructs an {! Ast.class_structure}\n\n{b Example OCaml}\n\n Values of type {!class_structure} represents:\n - [object(selfpat) ... end]\n - [object ... end] when {{!class_structure.pcstr_self} [pcstr_self]} is\n {{!pattern_desc.Ppat_any} [Ppat_any]} "][@@@ocaml.text"{2 Class signature}"]valclass_signature:self:core_type->fields:class_type_fieldlist->class_signature[@@ocaml.doc" [class_signature] constructs an {! Ast.class_signature}\n\n{b Example OCaml}\n\n Values of type [class_signature] represents:\n - [object('selfpat) ... end]\n - [object ... end] when {{!class_signature.pcsig_self} [pcsig_self]} is\n {{!core_type_desc.Ptyp_any} [Ptyp_any]} "][@@@ocaml.text"{2 Class field}"]valpcf_extension:loc:Location.t->extension->class_field[@@ocaml.doc" [pcf_extension] constructs an {! Ast.Pcf_extension}\n\n{b Example OCaml}\n\n [[%%id]] "]valpcf_attribute:loc:Location.t->attribute->class_field[@@ocaml.doc" [pcf_attribute] constructs an {! Ast.Pcf_attribute}\n\n{b Example OCaml}\n\n [[\\@\\@\\@id]] "]valpcf_initializer:loc:Location.t->expression->class_field[@@ocaml.doc" [pcf_initializer] constructs an {! Ast.Pcf_initializer}\n\n{b Example OCaml}\n\n [initializer E] "]valpcf_constraint:loc:Location.t->(core_type*core_type)->class_field[@@ocaml.doc" [pcf_constraint] constructs an {! Ast.Pcf_constraint}\n\n{b Example OCaml}\n\n [constraint T1 = T2] "]valpcf_method:loc:Location.t->(labelloc*private_flag*class_field_kind)->class_field[@@ocaml.doc" [pcf_method] constructs an {! Ast.Pcf_method}\n\n{b Example OCaml}\n\n - [method x = E] ([E] can be a\n {{!expression_desc.Pexp_poly} [Pexp_poly]})\n - [method virtual x: T] ([T] can be a\n {{!core_type_desc.Ptyp_poly} [Ptyp_poly]}) "]valpcf_val:loc:Location.t->(labelloc*mutable_flag*class_field_kind)->class_field[@@ocaml.doc" [pcf_val] constructs an {! Ast.Pcf_val}\n\n{b Example OCaml}\n\n [Pcf_val(x,flag, kind)] represents:\n\n - [val x = E] when [flag] is\n {{!Asttypes.mutable_flag.Immutable} [Immutable]} and [kind] is\n {{!class_field_kind.Cfk_concrete} [Cfk_concrete(Fresh, E)]}\n - [val virtual x: T] when [flag] is\n {{!Asttypes.mutable_flag.Immutable} [Immutable]} and [kind] is\n {{!class_field_kind.Cfk_virtual} [Cfk_virtual(T)]}\n - [val mutable x = E] when [flag] is\n {{!Asttypes.mutable_flag.Mutable} [Mutable]} and [kind] is\n {{!class_field_kind.Cfk_concrete} [Cfk_concrete(Fresh, E)]}\n - [val mutable virtual x: T] when [flag] is\n {{!Asttypes.mutable_flag.Mutable} [Mutable]} and [kind] is\n {{!class_field_kind.Cfk_virtual} [Cfk_virtual(T)]} "]valpcf_inherit:loc:Location.t->override_flag->class_expr->stringlocoption->class_field[@@ocaml.doc" [pcf_inherit] constructs an {! Ast.Pcf_inherit}\n\n{b Example OCaml}\n\n [Pcf_inherit(flag, CE, s)] represents:\n\n - [inherit CE] when [flag] is\n {{!Asttypes.override_flag.Fresh} [Fresh]} and [s] is [None],\n - [inherit CE as x] when [flag] is\n {{!Asttypes.override_flag.Fresh} [Fresh]} and [s] is [Some x],\n - [inherit! CE] when [flag] is\n {{!Asttypes.override_flag.Override} [Override]} and [s] is [None],\n - [inherit! CE as x] when [flag] is\n {{!Asttypes.override_flag.Override} [Override]} and [s] is [Some x]\n "][@@@ocaml.text"{2 Class expr}"]valpcl_open:loc:Location.t->open_description->class_expr->class_expr[@@ocaml.doc" [pcl_open] constructs an {! Ast.Pcl_open}\n\n{b Example OCaml}\n\n [let open M in CE] "]valpcl_extension:loc:Location.t->extension->class_expr[@@ocaml.doc" [pcl_extension] constructs an {! Ast.Pcl_extension}\n\n{b Example OCaml}\n\n [[%id]] "]valpcl_constraint:loc:Location.t->class_expr->class_type->class_expr[@@ocaml.doc" [pcl_constraint] constructs an {! Ast.Pcl_constraint}\n\n{b Example OCaml}\n\n [(CE : CT)] "]valpcl_let:loc:Location.t->rec_flag->value_bindinglist->class_expr->class_expr[@@ocaml.doc" [pcl_let] constructs an {! Ast.Pcl_let}\n\n{b Example OCaml}\n\n [Pcl_let(rec, [(P1, E1); ... ; (Pn, En)], CE)] represents:\n - [let P1 = E1 and ... and Pn = EN in CE] when [rec] is\n {{!Asttypes.rec_flag.Nonrecursive} [Nonrecursive]},\n - [let rec P1 = E1 and ... and Pn = EN in CE] when [rec] is\n {{!Asttypes.rec_flag.Recursive} [Recursive]}. "]valpcl_apply:loc:Location.t->class_expr->(arg_label*expression)list->class_expr[@@ocaml.doc" [pcl_apply] constructs an {! Ast.Pcl_apply}\n\n{b Example OCaml}\n\n [Pcl_apply(CE, [(l1,E1) ; ... ; (ln,En)])] represents\n [CE ~l1:E1 ... ~ln:En]. [li] can be empty (non labeled argument) or\n start with [?] (optional argument).\n\n Invariant: [n > 0] "]valpcl_fun:loc:Location.t->arg_label->expressionoption->pattern->class_expr->class_expr[@@ocaml.doc" [pcl_fun] constructs an {! Ast.Pcl_fun}\n\n{b Example OCaml}\n\n [Pcl_fun(lbl, exp0, P, CE)] represents:\n - [fun P -> CE] when [lbl] is\n {{!Asttypes.arg_label.Nolabel} [Nolabel]} and [exp0] is [None],\n - [fun ~l:P -> CE] when [lbl] is\n {{!Asttypes.arg_label.Labelled} [Labelled l]} and [exp0] is [None],\n - [fun ?l:P -> CE] when [lbl] is\n {{!Asttypes.arg_label.Optional} [Optional l]} and [exp0] is [None],\n - [fun ?l:(P = E0) -> CE] when [lbl] is\n {{!Asttypes.arg_label.Optional} [Optional l]} and [exp0] is\n [Some E0]. "]valpcl_structure:loc:Location.t->class_structure->class_expr[@@ocaml.doc" [pcl_structure] constructs an {! Ast.Pcl_structure}\n\n{b Example OCaml}\n\n [object ... end] "]valpcl_constr:loc:Location.t->longidentloc->core_typelist->class_expr[@@ocaml.doc" [pcl_constr] constructs an {! Ast.Pcl_constr}\n\n{b Example OCaml}\n\n [c] and [['a1, ..., 'an] c] "][@@@ocaml.text"{2 Case}"]valcase:lhs:pattern->guard:expressionoption->rhs:expression->case[@@ocaml.doc" [case] constructs an {! Ast.case}\n\n{b Example OCaml}\n\n Values of type {!case} represents [(P -> E)] or [(P when E0 -> E)] "][@@@ocaml.text"{2 Binding op}"]valbinding_op:loc:Location.t->op:stringloc->pat:pattern->exp:expression->binding_op[@@ocaml.doc" [binding_op] constructs an {! Ast.binding_op}\n\n "][@@@ocaml.text"{2 Attribute}"]valattribute:loc:Location.t->name:stringloc->payload:payload->attribute[@@ocaml.doc" [attribute] constructs an {! Ast.attribute}\n\n{b Example OCaml}\n\n Attributes such as [[\\@id ARG]] and [[\\@\\@id ARG]].\n\n Metadata containers passed around within the AST. The compiler ignores\n unknown attributes. "][@@@ocaml.text"{2 'a open infos}"]valopen_infos:loc:Location.t->expr:'a->override:override_flag->'aopen_infos[@@ocaml.doc" [open_infos] constructs an {! Ast.'a open_infos}\n\n{b Example OCaml}\n\n Values of type ['a open_infos] represents:\n - [open! X] when {{!open_infos.popen_override} [popen_override]} is\n {{!Asttypes.override_flag.Override} [Override]} (silences the \"used\n identifier shadowing\" warning)\n - [open X] when {{!open_infos.popen_override} [popen_override]} is\n {{!Asttypes.override_flag.Fresh} [Fresh]} "][@@@ocaml.text"{2 'a include infos}"]valinclude_infos:loc:Location.t->'a->'ainclude_infos[@@ocaml.doc" [include_infos] constructs an {! Ast.'a include_infos}\n\n "][@@@ocaml.text"{2 'a class infos}"]valclass_infos:loc:Location.t->virt:virtual_flag->params:(core_type*(variance*injectivity))list->name:stringloc->expr:'a->'aclass_infos[@@ocaml.doc" [class_infos] constructs an {! Ast.'a class_infos}\n\n{b Example OCaml}\n\n Values of type [class_expr class_infos] represents:\n - [class c = ...]\n - [class ['a1,...,'an] c = ...]\n - [class virtual c = ...]\n\n They are also used for \"class type\" declaration. "]endmoduletypeIntf_located=sigvalloc:Location.t[@@@ocaml.text"{2 Value description}"]valvalue_description:name:stringloc->type_:core_type->prim:stringlist->value_description[@@ocaml.doc" [value_description] constructs an {! Ast.value_description}\n\n{b Example OCaml}\n\n Values of type {!value_description} represents:\n - [val x: T], when {{!value_description.pval_prim} [pval_prim]} is [[]]\n - [external x: T = \"s1\" ... \"sn\"] when\n {{!value_description.pval_prim} [pval_prim]} is [[\"s1\";...\"sn\"]] "][@@@ocaml.text"{2 Value binding}"]valvalue_binding:pat:pattern->expr:expression->constraint_:value_constraintoption->value_binding[@@ocaml.doc" [value_binding] constructs an {! Ast.value_binding}\n\n "][@@@ocaml.text"{2 Type extension}"]valtype_extension:path:longidentloc->params:(core_type*(variance*injectivity))list->constructors:extension_constructorlist->private_:private_flag->type_extension[@@ocaml.doc" [type_extension] constructs an {! Ast.type_extension}\n\n{b Example OCaml}\n\n Definition of new extensions constructors for the extensive sum type [t]\n ([type t += ...]). "][@@@ocaml.text"{2 Type exception}"]valtype_exception:extension_constructor->type_exception[@@ocaml.doc" [type_exception] constructs an {! Ast.type_exception}\n\n{b Example OCaml}\n\n Definition of a new exception ([exception E]). "][@@@ocaml.text"{2 Type declaration}"]valtype_declaration:name:stringloc->params:(core_type*(variance*injectivity))list->cstrs:(core_type*core_type*location)list->kind:type_kind->private_:private_flag->manifest:core_typeoption->type_declaration[@@ocaml.doc" [type_declaration] constructs an {! Ast.type_declaration}\n\n{b Example OCaml}\n\n Here are type declarations and their representation, for various\n {{!type_declaration.ptype_kind} [ptype_kind]} and\n {{!type_declaration.ptype_manifest} [ptype_manifest]} values:\n\n - [type t] when [type_kind] is\n {{!type_kind.Ptype_abstract} [Ptype_abstract]}, and [manifest] is [None],\n - [type t = T0] when [type_kind] is\n {{!type_kind.Ptype_abstract} [Ptype_abstract]}, and [manifest] is\n [Some T0],\n - [type t = C of T | ...] when [type_kind] is\n {{!type_kind.Ptype_variant} [Ptype_variant]}, and [manifest] is [None],\n - [type t = T0 = C of T | ...] when [type_kind] is\n {{!type_kind.Ptype_variant} [Ptype_variant]}, and [manifest] is [Some T0],\n - [type t = {l: T; ...}] when [type_kind] is\n {{!type_kind.Ptype_record} [Ptype_record]}, and [manifest] is [None],\n - [type t = T0 = {l : T; ...}] when [type_kind] is\n {{!type_kind.Ptype_record} [Ptype_record]}, and [manifest] is [Some T0],\n - [type t = ..] when [type_kind] is {{!type_kind.Ptype_open} [Ptype_open]},\n and [manifest] is [None]. "][@@@ocaml.text"{2 Toplevel directive}"]valtoplevel_directive:name:stringloc->arg:directive_argumentoption->toplevel_directive[@@ocaml.doc" [toplevel_directive] constructs an {! Ast.toplevel_directive}\n\n "][@@@ocaml.text"{2 Structure item}"]valpstr_extension:extension->attributes->structure_item[@@ocaml.doc" [pstr_extension] constructs an {! Ast.Pstr_extension}\n\n{b Example OCaml}\n\n [[%%id]] "]valpstr_attribute:attribute->structure_item[@@ocaml.doc" [pstr_attribute] constructs an {! Ast.Pstr_attribute}\n\n{b Example OCaml}\n\n [[\\@\\@\\@id]] "]valpstr_include:include_declaration->structure_item[@@ocaml.doc" [pstr_include] constructs an {! Ast.Pstr_include}\n\n{b Example OCaml}\n\n [include ME] "]valpstr_class_type:class_type_declarationlist->structure_item[@@ocaml.doc" [pstr_class_type] constructs an {! Ast.Pstr_class_type}\n\n{b Example OCaml}\n\n [class type ct1 = ... and ... and ctn = ...] "]valpstr_class:class_declarationlist->structure_item[@@ocaml.doc" [pstr_class] constructs an {! Ast.Pstr_class}\n\n{b Example OCaml}\n\n [class c1 = ... and ... and cn = ...] "]valpstr_open:open_declaration->structure_item[@@ocaml.doc" [pstr_open] constructs an {! Ast.Pstr_open}\n\n{b Example OCaml}\n\n [open X] "]valpstr_modtype:module_type_declaration->structure_item[@@ocaml.doc" [pstr_modtype] constructs an {! Ast.Pstr_modtype}\n\n{b Example OCaml}\n\n [module type S = MT] "]valpstr_recmodule:module_bindinglist->structure_item[@@ocaml.doc" [pstr_recmodule] constructs an {! Ast.Pstr_recmodule}\n\n{b Example OCaml}\n\n [module rec X1 = ME1 and ... and Xn = MEn] "]valpstr_module:module_binding->structure_item[@@ocaml.doc" [pstr_module] constructs an {! Ast.Pstr_module}\n\n{b Example OCaml}\n\n [module X = ME] "]valpstr_exception:type_exception->structure_item[@@ocaml.doc" [pstr_exception] constructs an {! Ast.Pstr_exception}\n\n{b Example OCaml}\n\n - [exception C of T]\n - [exception C = M.X] "]valpstr_typext:type_extension->structure_item[@@ocaml.doc" [pstr_typext] constructs an {! Ast.Pstr_typext}\n\n{b Example OCaml}\n\n [type t1 += ...] "]valpstr_type:rec_flag->type_declarationlist->structure_item[@@ocaml.doc" [pstr_type] constructs an {! Ast.Pstr_type}\n\n{b Example OCaml}\n\n [type t1 = ... and ... and tn = ...] "]valpstr_primitive:value_description->structure_item[@@ocaml.doc" [pstr_primitive] constructs an {! Ast.Pstr_primitive}\n\n{b Example OCaml}\n\n - [val x: T]\n - [external x: T = \"s1\" ... \"sn\" ] "]valpstr_value:rec_flag->value_bindinglist->structure_item[@@ocaml.doc" [pstr_value] constructs an {! Ast.Pstr_value}\n\n{b Example OCaml}\n\n [Pstr_value(rec, [(P1, E1 ; ... ; (Pn, En))])] represents:\n - [let P1 = E1 and ... and Pn = EN] when [rec] is\n {{!Asttypes.rec_flag.Nonrecursive} [Nonrecursive]},\n - [let rec P1 = E1 and ... and Pn = EN ] when [rec] is\n {{!Asttypes.rec_flag.Recursive} [Recursive]}. "]valpstr_eval:expression->attributes->structure_item[@@ocaml.doc" [pstr_eval] constructs an {! Ast.Pstr_eval}\n\n{b Example OCaml}\n\n [E] "][@@@ocaml.text"{2 Signature item}"]valpsig_extension:extension->attributes->signature_item[@@ocaml.doc" [psig_extension] constructs an {! Ast.Psig_extension}\n\n{b Example OCaml}\n\n [[%%id]] "]valpsig_attribute:attribute->signature_item[@@ocaml.doc" [psig_attribute] constructs an {! Ast.Psig_attribute}\n\n{b Example OCaml}\n\n [[\\@\\@\\@id]] "]valpsig_class_type:class_type_declarationlist->signature_item[@@ocaml.doc" [psig_class_type] constructs an {! Ast.Psig_class_type}\n\n{b Example OCaml}\n\n [class type ct1 = ... and ... and ctn = ...] "]valpsig_class:class_descriptionlist->signature_item[@@ocaml.doc" [psig_class] constructs an {! Ast.Psig_class}\n\n{b Example OCaml}\n\n [class c1 : ... and ... and cn : ...] "]valpsig_include:include_description->signature_item[@@ocaml.doc" [psig_include] constructs an {! Ast.Psig_include}\n\n{b Example OCaml}\n\n [include MT] "]valpsig_open:open_description->signature_item[@@ocaml.doc" [psig_open] constructs an {! Ast.Psig_open}\n\n{b Example OCaml}\n\n [open X] "]valpsig_modtypesubst:module_type_declaration->signature_item[@@ocaml.doc" [psig_modtypesubst] constructs an {! Ast.Psig_modtypesubst}\n\n{b Example OCaml}\n\n [module type S := ...] "]valpsig_modtype:module_type_declaration->signature_item[@@ocaml.doc" [psig_modtype] constructs an {! Ast.Psig_modtype}\n\n{b Example OCaml}\n\n [module type S = MT] and [module type S] "]valpsig_recmodule:module_declarationlist->signature_item[@@ocaml.doc" [psig_recmodule] constructs an {! Ast.Psig_recmodule}\n\n{b Example OCaml}\n\n [module rec X1 : MT1 and ... and Xn : MTn] "]valpsig_modsubst:module_substitution->signature_item[@@ocaml.doc" [psig_modsubst] constructs an {! Ast.Psig_modsubst}\n\n{b Example OCaml}\n\n [module X := M] "]valpsig_module:module_declaration->signature_item[@@ocaml.doc" [psig_module] constructs an {! Ast.Psig_module}\n\n{b Example OCaml}\n\n [module X = M] and [module X : MT] "]valpsig_exception:type_exception->signature_item[@@ocaml.doc" [psig_exception] constructs an {! Ast.Psig_exception}\n\n{b Example OCaml}\n\n [exception C of T] "]valpsig_typext:type_extension->signature_item[@@ocaml.doc" [psig_typext] constructs an {! Ast.Psig_typext}\n\n{b Example OCaml}\n\n [type t1 += ...] "]valpsig_typesubst:type_declarationlist->signature_item[@@ocaml.doc" [psig_typesubst] constructs an {! Ast.Psig_typesubst}\n\n{b Example OCaml}\n\n [type t1 := ... and ... and tn := ...] "]valpsig_type:rec_flag->type_declarationlist->signature_item[@@ocaml.doc" [psig_type] constructs an {! Ast.Psig_type}\n\n{b Example OCaml}\n\n [type t1 = ... and ... and tn = ...] "]valpsig_value:value_description->signature_item[@@ocaml.doc" [psig_value] constructs an {! Ast.Psig_value}\n\n{b Example OCaml}\n\n - [val x: T]\n - [external x: T = \"s1\" ... \"sn\"] "][@@@ocaml.text"{2 Row field}"]valrinherit:core_type->row_field[@@ocaml.doc" [rinherit] constructs an {! Ast.Rinherit}\n\n{b Example OCaml}\n\n [[ | t ]] "]valrtag:labelloc->bool->core_typelist->row_field[@@ocaml.doc" [rtag] constructs an {! Ast.Rtag}\n\n{b Example OCaml}\n\n [Rtag(`A, b, l)] represents:\n - [`A] when [b] is [true] and [l] is [[]],\n - [`A of T] when [b] is [false] and [l] is [[T]],\n - [`A of T1 & .. & Tn] when [b] is [false] and [l] is [[T1;...Tn]],\n - [`A of & T1 & .. & Tn] when [b] is [true] and [l] is [[T1;...Tn]].\n\n - The [bool] field is true if the tag contains a constant (empty)\n constructor.\n - [&] occurs when several types are used for the same constructor (see\n 4.2 in the manual) "][@@@ocaml.text"{2 Position}"]valposition:fname:string->lnum:int->bol:int->cnum:int->position[@@ocaml.doc" [position] constructs an {! Ast.position}\n\n "][@@@ocaml.text"{2 Pattern}"]valppat_open:longidentloc->pattern->pattern[@@ocaml.doc" [ppat_open] constructs an {! Ast.Ppat_open}\n\n{b Example OCaml}\n\n Pattern [M.(P)] "]valppat_extension:extension->pattern[@@ocaml.doc" [ppat_extension] constructs an {! Ast.Ppat_extension}\n\n{b Example OCaml}\n\n Pattern [[%id]] "]valppat_exception:pattern->pattern[@@ocaml.doc" [ppat_exception] constructs an {! Ast.Ppat_exception}\n\n{b Example OCaml}\n\n Pattern [exception P] "]valppat_unpack:stringoptionloc->pattern[@@ocaml.doc" [ppat_unpack] constructs an {! Ast.Ppat_unpack}\n\n{b Example OCaml}\n\n [Ppat_unpack(s)] represents:\n - [(module P)] when [s] is [Some \"P\"]\n - [(module _)] when [s] is [None]\n\n Note: [(module P : S)] is represented as\n [Ppat_constraint(Ppat_unpack(Some \"P\"), Ptyp_package S)] "]valppat_lazy:pattern->pattern[@@ocaml.doc" [ppat_lazy] constructs an {! Ast.Ppat_lazy}\n\n{b Example OCaml}\n\n Pattern [lazy P] "]valppat_type:longidentloc->pattern[@@ocaml.doc" [ppat_type] constructs an {! Ast.Ppat_type}\n\n{b Example OCaml}\n\n Pattern [#tconst] "]valppat_constraint:pattern->core_type->pattern[@@ocaml.doc" [ppat_constraint] constructs an {! Ast.Ppat_constraint}\n\n{b Example OCaml}\n\n Pattern [(P : T)] "]valppat_or:pattern->pattern->pattern[@@ocaml.doc" [ppat_or] constructs an {! Ast.Ppat_or}\n\n{b Example OCaml}\n\n Pattern [P1 | P2] "]valppat_array:patternlist->pattern[@@ocaml.doc" [ppat_array] constructs an {! Ast.Ppat_array}\n\n{b Example OCaml}\n\n Pattern [[| P1; ...; Pn |]] "]valppat_record:(longidentloc*pattern)list->closed_flag->pattern[@@ocaml.doc" [ppat_record] constructs an {! Ast.Ppat_record}\n\n{b Example OCaml}\n\n [Ppat_record([(l1, P1) ; ... ; (ln, Pn)], flag)] represents:\n - [{ l1=P1; ...; ln=Pn }] when [flag] is\n {{!Asttypes.closed_flag.Closed} [Closed]}\n - [{ l1=P1; ...; ln=Pn; _}] when [flag] is\n {{!Asttypes.closed_flag.Open} [Open]}\n\n Invariant: [n > 0] "]valppat_variant:label->patternoption->pattern[@@ocaml.doc" [ppat_variant] constructs an {! Ast.Ppat_variant}\n\n{b Example OCaml}\n\n [Ppat_variant(`A, pat)] represents:\n - [`A] when [pat] is [None],\n - [`A P] when [pat] is [Some P] "]valppat_construct:longidentloc->(stringloclist*pattern)option->pattern[@@ocaml.doc" [ppat_construct] constructs an {! Ast.Ppat_construct}\n\n{b Example OCaml}\n\n [Ppat_construct(C, args)] represents:\n - [C] when [args] is [None],\n - [C P] when [args] is [Some ([], P)]\n - [C (P1, ..., Pn)] when [args] is\n [Some ([], Ppat_tuple [P1; ...; Pn])]\n - [C (type a b) P] when [args] is [Some ([a; b], P)] "]valppat_tuple:patternlist->pattern[@@ocaml.doc" [ppat_tuple] constructs an {! Ast.Ppat_tuple}\n\n{b Example OCaml}\n\n Patterns [(P1, ..., Pn)].\n\n Invariant: [n >= 2] "]valppat_interval:constant->constant->pattern[@@ocaml.doc" [ppat_interval] constructs an {! Ast.Ppat_interval}\n\n{b Example OCaml}\n\n Patterns such as ['a'..'z'].\n\n Other forms of interval are recognized by the parser but rejected by\n the type-checker. "]valppat_constant:constant->pattern[@@ocaml.doc" [ppat_constant] constructs an {! Ast.Ppat_constant}\n\n{b Example OCaml}\n\n Patterns such as [1], ['a'], [\"true\"], [1.0], [1l], [1L], [1n] "]valppat_alias:pattern->stringloc->pattern[@@ocaml.doc" [ppat_alias] constructs an {! Ast.Ppat_alias}\n\n{b Example OCaml}\n\n An alias pattern such as [P as 'a] "]valppat_var:stringloc->pattern[@@ocaml.doc" [ppat_var] constructs an {! Ast.Ppat_var}\n\n{b Example OCaml}\n\n A variable pattern such as [x] "]valppat_any:pattern[@@ocaml.doc" [ppat_any] constructs an {! Ast.Ppat_any}\n\n{b Example OCaml}\n\n The pattern [_]. "][@@@ocaml.text"{2 Object field}"]valoinherit:core_type->object_field[@@ocaml.doc" [oinherit] constructs an {! Ast.Oinherit}\n\n "]valotag:labelloc->core_type->object_field[@@ocaml.doc" [otag] constructs an {! Ast.Otag}\n\n "][@@@ocaml.text"{2 Module type declaration}"]valmodule_type_declaration:name:stringloc->type_:module_typeoption->module_type_declaration[@@ocaml.doc" [module_type_declaration] constructs an {! Ast.module_type_declaration}\n\n{b Example OCaml}\n\n Values of type [module_type_declaration] represents:\n - [S = MT],\n - [S] for abstract module type declaration, when\n {{!module_type_declaration.pmtd_type} [pmtd_type]} is [None]. "][@@@ocaml.text"{2 Module type}"]valpmty_alias:longidentloc->module_type[@@ocaml.doc" [pmty_alias] constructs an {! Ast.Pmty_alias}\n\n{b Example OCaml}\n\n [(module M)] "]valpmty_extension:extension->module_type[@@ocaml.doc" [pmty_extension] constructs an {! Ast.Pmty_extension}\n\n{b Example OCaml}\n\n [[%id]] "]valpmty_typeof:module_expr->module_type[@@ocaml.doc" [pmty_typeof] constructs an {! Ast.Pmty_typeof}\n\n{b Example OCaml}\n\n [module type of ME] "]valpmty_with:module_type->with_constraintlist->module_type[@@ocaml.doc" [pmty_with] constructs an {! Ast.Pmty_with}\n\n{b Example OCaml}\n\n [MT with ...] "]valpmty_functor:functor_parameter->module_type->module_type[@@ocaml.doc" [pmty_functor] constructs an {! Ast.Pmty_functor}\n\n{b Example OCaml}\n\n [functor(X : MT1) -> MT2] "]valpmty_signature:signature->module_type[@@ocaml.doc" [pmty_signature] constructs an {! Ast.Pmty_signature}\n\n{b Example OCaml}\n\n [sig ... end] "]valpmty_ident:longidentloc->module_type[@@ocaml.doc" [pmty_ident] constructs an {! Ast.Pmty_ident}\n\n{b Example OCaml}\n\n [Pmty_ident(S)] represents [S] "][@@@ocaml.text"{2 Module substitution}"]valmodule_substitution:name:stringloc->manifest:longidentloc->module_substitution[@@ocaml.doc" [module_substitution] constructs an {! Ast.module_substitution}\n\n{b Example OCaml}\n\n Values of type [module_substitution] represents [S := M] "][@@@ocaml.text"{2 Module expr}"]valpmod_extension:extension->module_expr[@@ocaml.doc" [pmod_extension] constructs an {! Ast.Pmod_extension}\n\n{b Example OCaml}\n\n [[%id]] "]valpmod_unpack:expression->module_expr[@@ocaml.doc" [pmod_unpack] constructs an {! Ast.Pmod_unpack}\n\n{b Example OCaml}\n\n [(val E)] "]valpmod_constraint:module_expr->module_type->module_expr[@@ocaml.doc" [pmod_constraint] constructs an {! Ast.Pmod_constraint}\n\n{b Example OCaml}\n\n [(ME : MT)] "]valpmod_apply_unit:module_expr->module_expr[@@ocaml.doc" [pmod_apply_unit] constructs an {! Ast.Pmod_apply_unit}\n\n{b Example OCaml}\n\n [ME1()] "]valpmod_apply:module_expr->module_expr->module_expr[@@ocaml.doc" [pmod_apply] constructs an {! Ast.Pmod_apply}\n\n{b Example OCaml}\n\n [ME1(ME2)] "]valpmod_functor:functor_parameter->module_expr->module_expr[@@ocaml.doc" [pmod_functor] constructs an {! Ast.Pmod_functor}\n\n{b Example OCaml}\n\n [functor(X : MT1) -> ME] "]valpmod_structure:structure->module_expr[@@ocaml.doc" [pmod_structure] constructs an {! Ast.Pmod_structure}\n\n{b Example OCaml}\n\n [struct ... end] "]valpmod_ident:longidentloc->module_expr[@@ocaml.doc" [pmod_ident] constructs an {! Ast.Pmod_ident}\n\n{b Example OCaml}\n\n [X] "][@@@ocaml.text"{2 Module declaration}"]valmodule_declaration:name:stringoptionloc->type_:module_type->module_declaration[@@ocaml.doc" [module_declaration] constructs an {! Ast.module_declaration}\n\n{b Example OCaml}\n\n Values of type [module_declaration] represents [S : MT] "][@@@ocaml.text"{2 Module binding}"]valmodule_binding:name:stringoptionloc->expr:module_expr->module_binding[@@ocaml.doc" [module_binding] constructs an {! Ast.module_binding}\n\n{b Example OCaml}\n\n Values of type [module_binding] represents [module X = ME] "][@@@ocaml.text"{2 Location}"]vallocation:start:position->end_:position->ghost:bool->location[@@ocaml.doc" [location] constructs an {! Ast.location}\n\n "][@@@ocaml.text"{2 Letop}"]valletop:let_:binding_op->ands:binding_oplist->body:expression->letop[@@ocaml.doc" [letop] constructs an {! Ast.letop}\n\n "][@@@ocaml.text"{2 Label declaration}"]vallabel_declaration:name:stringloc->mutable_:mutable_flag->type_:core_type->label_declaration[@@ocaml.doc" [label_declaration] constructs an {! Ast.label_declaration}\n\n{b Example OCaml}\n\n - [{ ...; l: T; ... }] when {{!label_declaration.pld_mutable} [pld_mutable]}\n is {{!Asttypes.mutable_flag.Immutable} [Immutable]},\n - [{ ...; mutable l: T; ... }] when\n {{!label_declaration.pld_mutable} [pld_mutable]} is\n {{!Asttypes.mutable_flag.Mutable} [Mutable]}.\n\n Note: [T] can be a {{!core_type_desc.Ptyp_poly} [Ptyp_poly]}. "][@@@ocaml.text"{2 Function param}"]valpparam_newtype:stringloc->function_param[@@ocaml.doc" [pparam_newtype] constructs an {! Ast.Pparam_newtype}\n\n{b Example OCaml}\n\n [Pparam_newtype x] represents the parameter [(type x)]. [x] carries\n the location of the identifier, whereas the [pparam_loc] on the\n enclosing [function_param] node is the location of the [(type x)] as a\n whole.\n\n Multiple parameters [(type a b c)] are represented as multiple\n [Pparam_newtype] nodes, let's say:\n\n {[\n [\n { pparam_kind = Pparam_newtype a; pparam_loc = loc1 };\n { pparam_kind = Pparam_newtype b; pparam_loc = loc2 };\n { pparam_kind = Pparam_newtype c; pparam_loc = loc3 };\n ]\n ]}\n\n Here, the first loc [loc1] is the location of [(type a b c)], and the\n subsequent locs [loc2] and [loc3] are the same as [loc1], except\n marked as ghost locations. The locations on [a], [b], [c], correspond\n to the variables [a], [b], and [c] in the source code. "]valpparam_val:arg_label->expressionoption->pattern->function_param[@@ocaml.doc" [pparam_val] constructs an {! Ast.Pparam_val}\n\n{b Example OCaml}\n\n [Pparam_val (lbl, exp0, P)] represents the parameter:\n - [P] when [lbl] is {{!Asttypes.arg_label.Nolabel} [Nolabel]} and\n [exp0] is [None]\n - [~l:P] when [lbl] is {{!Asttypes.arg_label.Labelled} [Labelled l]}\n and [exp0] is [None]\n - [?l:P] when [lbl] is {{!Asttypes.arg_label.Optional} [Optional l]}\n and [exp0] is [None]\n - [?l:(P = E0)] when [lbl] is\n {{!Asttypes.arg_label.Optional} [Optional l]} and [exp0] is\n [Some E0]\n\n Note: If [E0] is provided, only\n {{!Asttypes.arg_label.Optional} [Optional]} is allowed. "][@@@ocaml.text"{2 Extension constructor}"]valextension_constructor:name:stringloc->kind:extension_constructor_kind->extension_constructor[@@ocaml.doc" [extension_constructor] constructs an {! Ast.extension_constructor}\n\n "][@@@ocaml.text"{2 Expression}"]valpexp_unreachable:expression[@@ocaml.doc" [pexp_unreachable] constructs an {! Ast.Pexp_unreachable}\n\n{b Example OCaml}\n\n [.] "]valpexp_extension:extension->expression[@@ocaml.doc" [pexp_extension] constructs an {! Ast.Pexp_extension}\n\n{b Example OCaml}\n\n [[%id]] "]valpexp_letop:letop->expression[@@ocaml.doc" [pexp_letop] constructs an {! Ast.Pexp_letop}\n\n{b Example OCaml}\n\n - [let* P = E0 in E1]\n - [let* P0 = E00 and* P1 = E01 in E1] "]valpexp_open:open_declaration->expression->expression[@@ocaml.doc" [pexp_open] constructs an {! Ast.Pexp_open}\n\n{b Example OCaml}\n\n - [M.(E)]\n - [let open M in E]\n - [let open! M in E] "]valpexp_pack:module_expr->expression[@@ocaml.doc" [pexp_pack] constructs an {! Ast.Pexp_pack}\n\n{b Example OCaml}\n\n [(module ME)].\n\n [(module ME : S)] is represented as\n [Pexp_constraint(Pexp_pack ME, Ptyp_package S)] "]valpexp_newtype:stringloc->expression->expression[@@ocaml.doc" [pexp_newtype] constructs an {! Ast.Pexp_newtype}\n\n{b Example OCaml}\n\n [fun (type t) -> E] "]valpexp_object:class_structure->expression[@@ocaml.doc" [pexp_object] constructs an {! Ast.Pexp_object}\n\n{b Example OCaml}\n\n [object ... end] "]valpexp_poly:expression->core_typeoption->expression[@@ocaml.doc" [pexp_poly] constructs an {! Ast.Pexp_poly}\n\n{b Example OCaml}\n\n Used for method bodies.\n\n Can only be used as the expression under\n {{!class_field_kind.Cfk_concrete} [Cfk_concrete]} for methods (not\n values). "]valpexp_lazy:expression->expression[@@ocaml.doc" [pexp_lazy] constructs an {! Ast.Pexp_lazy}\n\n{b Example OCaml}\n\n [lazy E] "]valpexp_assert:expression->expression[@@ocaml.doc" [pexp_assert] constructs an {! Ast.Pexp_assert}\n\n{b Example OCaml}\n\n [assert E].\n\n Note: [assert false] is treated in a special way by the type-checker.\n "]valpexp_letexception:extension_constructor->expression->expression[@@ocaml.doc" [pexp_letexception] constructs an {! Ast.Pexp_letexception}\n\n{b Example OCaml}\n\n [let exception C in E] "]valpexp_letmodule:stringoptionloc->module_expr->expression->expression[@@ocaml.doc" [pexp_letmodule] constructs an {! Ast.Pexp_letmodule}\n\n{b Example OCaml}\n\n [let module M = ME in E] "]valpexp_override:(labelloc*expression)list->expression[@@ocaml.doc" [pexp_override] constructs an {! Ast.Pexp_override}\n\n{b Example OCaml}\n\n [{< x1 = E1; ...; xn = En >}] "]valpexp_setinstvar:labelloc->expression->expression[@@ocaml.doc" [pexp_setinstvar] constructs an {! Ast.Pexp_setinstvar}\n\n{b Example OCaml}\n\n [x <- 2] "]valpexp_new:longidentloc->expression[@@ocaml.doc" [pexp_new] constructs an {! Ast.Pexp_new}\n\n{b Example OCaml}\n\n [new M.c] "]valpexp_send:expression->labelloc->expression[@@ocaml.doc" [pexp_send] constructs an {! Ast.Pexp_send}\n\n{b Example OCaml}\n\n [E # m] "]valpexp_coerce:expression->core_typeoption->core_type->expression[@@ocaml.doc" [pexp_coerce] constructs an {! Ast.Pexp_coerce}\n\n{b Example OCaml}\n\n [Pexp_coerce(E, from, T)] represents\n - [(E :> T)] when [from] is [None],\n - [(E : T0 :> T)] when [from] is [Some T0]. "]valpexp_constraint:expression->core_type->expression[@@ocaml.doc" [pexp_constraint] constructs an {! Ast.Pexp_constraint}\n\n{b Example OCaml}\n\n [(E : T)] "]valpexp_for:pattern->expression->expression->direction_flag->expression->expression[@@ocaml.doc" [pexp_for] constructs an {! Ast.Pexp_for}\n\n{b Example OCaml}\n\n [Pexp_for(i, E1, E2, direction, E3)] represents:\n - [for i = E1 to E2 do E3 done] when [direction] is\n {{!Asttypes.direction_flag.Upto} [Upto]}\n - [for i = E1 downto E2 do E3 done] when [direction] is\n {{!Asttypes.direction_flag.Downto} [Downto]} "]valpexp_while:expression->expression->expression[@@ocaml.doc" [pexp_while] constructs an {! Ast.Pexp_while}\n\n{b Example OCaml}\n\n [while E1 do E2 done] "]valpexp_sequence:expression->expression->expression[@@ocaml.doc" [pexp_sequence] constructs an {! Ast.Pexp_sequence}\n\n{b Example OCaml}\n\n [E1; E2] "]valpexp_ifthenelse:expression->expression->expressionoption->expression[@@ocaml.doc" [pexp_ifthenelse] constructs an {! Ast.Pexp_ifthenelse}\n\n{b Example OCaml}\n\n [if E1 then E2 else E3] "]valpexp_array:expressionlist->expression[@@ocaml.doc" [pexp_array] constructs an {! Ast.Pexp_array}\n\n{b Example OCaml}\n\n [[| E1; ...; En |]] "]valpexp_setfield:expression->longidentloc->expression->expression[@@ocaml.doc" [pexp_setfield] constructs an {! Ast.Pexp_setfield}\n\n{b Example OCaml}\n\n [E1.l <- E2] "]valpexp_field:expression->longidentloc->expression[@@ocaml.doc" [pexp_field] constructs an {! Ast.Pexp_field}\n\n{b Example OCaml}\n\n [E.l] "]valpexp_record:(longidentloc*expression)list->expressionoption->expression[@@ocaml.doc" [pexp_record] constructs an {! Ast.Pexp_record}\n\n{b Example OCaml}\n\n [Pexp_record([(l1,P1) ; ... ; (ln,Pn)], exp0)] represents\n - [{ l1=P1; ...; ln=Pn }] when [exp0] is [None]\n - [{ E0 with l1=P1; ...; ln=Pn }] when [exp0] is [Some E0]\n\n Invariant: [n > 0] "]valpexp_variant:label->expressionoption->expression[@@ocaml.doc" [pexp_variant] constructs an {! Ast.Pexp_variant}\n\n{b Example OCaml}\n\n [Pexp_variant(`A, exp)] represents\n - [`A] when [exp] is [None]\n - [`A E] when [exp] is [Some E] "]valpexp_construct:longidentloc->expressionoption->expression[@@ocaml.doc" [pexp_construct] constructs an {! Ast.Pexp_construct}\n\n{b Example OCaml}\n\n [Pexp_construct(C, exp)] represents:\n - [C] when [exp] is [None],\n - [C E] when [exp] is [Some E],\n - [C (E1, ..., En)] when [exp] is [Some (Pexp_tuple[E1;...;En])] "]valpexp_tuple:expressionlist->expression[@@ocaml.doc" [pexp_tuple] constructs an {! Ast.Pexp_tuple}\n\n{b Example OCaml}\n\n Expressions [(E1, ..., En)]\n\n Invariant: [n >= 2] "]valpexp_try:expression->cases->expression[@@ocaml.doc" [pexp_try] constructs an {! Ast.Pexp_try}\n\n{b Example OCaml}\n\n [try E0 with P1 -> E1 | ... | Pn -> En] "]valpexp_match:expression->cases->expression[@@ocaml.doc" [pexp_match] constructs an {! Ast.Pexp_match}\n\n{b Example OCaml}\n\n [match E0 with P1 -> E1 | ... | Pn -> En] "]valpexp_apply:expression->(arg_label*expression)list->expression[@@ocaml.doc" [pexp_apply] constructs an {! Ast.Pexp_apply}\n\n{b Example OCaml}\n\n [Pexp_apply(E0, [(l1, E1) ; ... ; (ln, En)])] represents\n [E0 ~l1:E1 ... ~ln:En]\n\n [li] can be {{!Asttypes.arg_label.Nolabel} [Nolabel]} (non labeled\n argument), {{!Asttypes.arg_label.Labelled} [Labelled]} (labelled\n arguments) or {{!Asttypes.arg_label.Optional} [Optional]} (optional\n argument).\n\n Invariant: [n > 0] "]valpexp_function:function_paramlist->type_constraintoption->function_body->expression[@@ocaml.doc" [pexp_function] constructs an {! Ast.Pexp_function}\n\n{b Example OCaml}\n\n [Pexp_function ([P1; ...; Pn], C, body)] represents any construct\n involving [fun] or [function], including:\n - [fun P1 ... Pn -> E] when [body = Pfunction_body E]\n - [fun P1 ... Pn -> function p1 -> e1 | ... | pm -> em] when\n [body = Pfunction_cases [ p1 -> e1; ...; pm -> em ]] [C] represents\n a type constraint or coercion placed immediately before the arrow,\n e.g. [fun P1 ... Pn : ty -> ...] when [C = Some (Pconstraint ty)]. A\n function must have parameters. [Pexp_function (params, _, body)]\n must have non-empty [params] or a [Pfunction_cases _] body. "]valpexp_let:rec_flag->value_bindinglist->expression->expression[@@ocaml.doc" [pexp_let] constructs an {! Ast.Pexp_let}\n\n{b Example OCaml}\n\n [Pexp_let(flag, [(P1,E1) ; ... ; (Pn,En)], E)] represents:\n - [let P1 = E1 and ... and Pn = EN in E] when [flag] is\n {{!Asttypes.rec_flag.Nonrecursive} [Nonrecursive]},\n - [let rec P1 = E1 and ... and Pn = EN in E] when [flag] is\n {{!Asttypes.rec_flag.Recursive} [Recursive]}. "]valpexp_constant:constant->expression[@@ocaml.doc" [pexp_constant] constructs an {! Ast.Pexp_constant}\n\n{b Example OCaml}\n\n Expressions constant such as [1], ['a'], [\"true\"], [1.0], [1l], [1L],\n [1n] "]valpexp_ident:longidentloc->expression[@@ocaml.doc" [pexp_ident] constructs an {! Ast.Pexp_ident}\n\n{b Example OCaml}\n\n Identifiers such as [x] and [M.x] "][@@@ocaml.text"{2 Directive argument}"]valpdir_bool:bool->directive_argument[@@ocaml.doc" [pdir_bool] constructs an {! Ast.Pdir_bool}\n\n "]valpdir_ident:longident->directive_argument[@@ocaml.doc" [pdir_ident] constructs an {! Ast.Pdir_ident}\n\n "]valpdir_int:string->charoption->directive_argument[@@ocaml.doc" [pdir_int] constructs an {! Ast.Pdir_int}\n\n "]valpdir_string:string->directive_argument[@@ocaml.doc" [pdir_string] constructs an {! Ast.Pdir_string}\n\n "][@@@ocaml.text"{2 Core type}"]valptyp_extension:extension->core_type[@@ocaml.doc" [ptyp_extension] constructs an {! Ast.Ptyp_extension}\n\n{b Example OCaml}\n\n [[%id]]. "]valptyp_open:longidentloc->core_type->core_type[@@ocaml.doc" [ptyp_open] constructs an {! Ast.Ptyp_open}\n\n{b Example OCaml}\n\n [M.(T)] "]valptyp_package:package_type->core_type[@@ocaml.doc" [ptyp_package] constructs an {! Ast.Ptyp_package}\n\n{b Example OCaml}\n\n [(module S)]. "]valptyp_poly:stringloclist->core_type->core_type[@@ocaml.doc" [ptyp_poly] constructs an {! Ast.Ptyp_poly}\n\n{b Example OCaml}\n\n ['a1 ... 'an. T]\n\n Can only appear in the following context:\n\n - As the {!core_type} of a\n {{!pattern_desc.Ppat_constraint} [Ppat_constraint]} node\n corresponding to a constraint on a let-binding:\n\n {[\n let x : 'a1 ... 'an. T = e ...\n ]}\n - Under {{!class_field_kind.Cfk_virtual} [Cfk_virtual]} for methods\n (not values).\n\n - As the {!core_type} of a\n {{!class_type_field_desc.Pctf_method} [Pctf_method]} node.\n\n - As the {!core_type} of a {{!expression_desc.Pexp_poly} [Pexp_poly]}\n node.\n\n - As the {{!label_declaration.pld_type} [pld_type]} field of a\n {!label_declaration}.\n\n - As a {!core_type} of a {{!core_type_desc.Ptyp_object} [Ptyp_object]}\n node.\n\n - As the {{!value_description.pval_type} [pval_type]} field of a\n {!value_description}. "]valptyp_variant:row_fieldlist->closed_flag->labellistoption->core_type[@@ocaml.doc" [ptyp_variant] constructs an {! Ast.Ptyp_variant}\n\n{b Example OCaml}\n\n [Ptyp_variant([`A;`B], flag, labels)] represents:\n - [[ `A|`B ]] when [flag] is\n {{!Asttypes.closed_flag.Closed} [Closed]}, and [labels] is [None],\n - [[> `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Open} [Open]},\n and [labels] is [None],\n - [[< `A|`B ]] when [flag] is\n {{!Asttypes.closed_flag.Closed} [Closed]}, and [labels] is\n [Some []],\n - [[< `A|`B > `X `Y ]] when [flag] is\n {{!Asttypes.closed_flag.Closed} [Closed]}, and [labels] is\n [Some [\"X\";\"Y\"]]. "]valptyp_alias:core_type->stringloc->core_type[@@ocaml.doc" [ptyp_alias] constructs an {! Ast.Ptyp_alias}\n\n{b Example OCaml}\n\n [T as 'a]. "]valptyp_class:longidentloc->core_typelist->core_type[@@ocaml.doc" [ptyp_class] constructs an {! Ast.Ptyp_class}\n\n{b Example OCaml}\n\n [Ptyp_class(tconstr, l)] represents:\n - [#tconstr] when [l=[]],\n - [T #tconstr] when [l=[T]],\n - [(T1, ..., Tn) #tconstr] when [l=[T1 ; ... ; Tn]]. "]valptyp_object:object_fieldlist->closed_flag->core_type[@@ocaml.doc" [ptyp_object] constructs an {! Ast.Ptyp_object}\n\n{b Example OCaml}\n\n [Ptyp_object([ l1:T1; ...; ln:Tn ], flag)] represents:\n - [< l1:T1; ...; ln:Tn >] when [flag] is\n {{!Asttypes.closed_flag.Closed} [Closed]},\n - [< l1:T1; ...; ln:Tn; .. >] when [flag] is\n {{!Asttypes.closed_flag.Open} [Open]}. "]valptyp_constr:longidentloc->core_typelist->core_type[@@ocaml.doc" [ptyp_constr] constructs an {! Ast.Ptyp_constr}\n\n{b Example OCaml}\n\n [Ptyp_constr(lident, l)] represents:\n - [tconstr] when [l=[]],\n - [T tconstr] when [l=[T]],\n - [(T1, ..., Tn) tconstr] when [l=[T1 ; ... ; Tn]]. "]valptyp_tuple:core_typelist->core_type[@@ocaml.doc" [ptyp_tuple] constructs an {! Ast.Ptyp_tuple}\n\n{b Example OCaml}\n\n [Ptyp_tuple([T1 ; ... ; Tn])] represents a product type\n [T1 * ... * Tn].\n\n Invariant: [n >= 2]. "]valptyp_arrow:arg_label->core_type->core_type->core_type[@@ocaml.doc" [ptyp_arrow] constructs an {! Ast.Ptyp_arrow}\n\n{b Example OCaml}\n\n [Ptyp_arrow(lbl, T1, T2)] represents:\n - [T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Nolabel} [Nolabel]},\n - [~l:T1 -> T2] when [lbl] is\n {{!Asttypes.arg_label.Labelled} [Labelled]},\n - [?l:T1 -> T2] when [lbl] is\n {{!Asttypes.arg_label.Optional} [Optional]}. "]valptyp_var:string->core_type[@@ocaml.doc" [ptyp_var] constructs an {! Ast.Ptyp_var}\n\n{b Example OCaml}\n\n A type variable such as ['a] "]valptyp_any:core_type[@@ocaml.doc" [ptyp_any] constructs an {! Ast.Ptyp_any}\n\n{b Example OCaml}\n\n [_] "][@@@ocaml.text"{2 Constructor declaration}"]valconstructor_declaration:name:stringloc->vars:stringloclist->args:constructor_arguments->res:core_typeoption->constructor_declaration[@@ocaml.doc" [constructor_declaration] constructs an {! Ast.constructor_declaration}\n\n "][@@@ocaml.text"{2 Class type field}"]valpctf_extension:extension->class_type_field[@@ocaml.doc" [pctf_extension] constructs an {! Ast.Pctf_extension}\n\n{b Example OCaml}\n\n [[%%id]] "]valpctf_attribute:attribute->class_type_field[@@ocaml.doc" [pctf_attribute] constructs an {! Ast.Pctf_attribute}\n\n{b Example OCaml}\n\n [[\\@\\@\\@id]] "]valpctf_constraint:(core_type*core_type)->class_type_field[@@ocaml.doc" [pctf_constraint] constructs an {! Ast.Pctf_constraint}\n\n{b Example OCaml}\n\n [constraint T1 = T2] "]valpctf_method:(labelloc*private_flag*virtual_flag*core_type)->class_type_field[@@ocaml.doc" [pctf_method] constructs an {! Ast.Pctf_method}\n\n{b Example OCaml}\n\n [method x: T]\n\n Note: [T] can be a {{!core_type_desc.Ptyp_poly} [Ptyp_poly]}. "]valpctf_val:(labelloc*mutable_flag*virtual_flag*core_type)->class_type_field[@@ocaml.doc" [pctf_val] constructs an {! Ast.Pctf_val}\n\n{b Example OCaml}\n\n [val x: T] "]valpctf_inherit:class_type->class_type_field[@@ocaml.doc" [pctf_inherit] constructs an {! Ast.Pctf_inherit}\n\n{b Example OCaml}\n\n [inherit CT] "][@@@ocaml.text"{2 Class type}"]valpcty_open:open_description->class_type->class_type[@@ocaml.doc" [pcty_open] constructs an {! Ast.Pcty_open}\n\n{b Example OCaml}\n\n [let open M in CT] "]valpcty_extension:extension->class_type[@@ocaml.doc" [pcty_extension] constructs an {! Ast.Pcty_extension}\n\n{b Example OCaml}\n\n [%id] "]valpcty_arrow:arg_label->core_type->class_type->class_type[@@ocaml.doc" [pcty_arrow] constructs an {! Ast.Pcty_arrow}\n\n{b Example OCaml}\n\n [Pcty_arrow(lbl, T, CT)] represents:\n - [T -> CT] when [lbl] is {{!Asttypes.arg_label.Nolabel} [Nolabel]},\n - [~l:T -> CT] when [lbl] is\n {{!Asttypes.arg_label.Labelled} [Labelled l]},\n - [?l:T -> CT] when [lbl] is\n {{!Asttypes.arg_label.Optional} [Optional l]}. "]valpcty_signature:class_signature->class_type[@@ocaml.doc" [pcty_signature] constructs an {! Ast.Pcty_signature}\n\n{b Example OCaml}\n\n [object ... end] "]valpcty_constr:longidentloc->core_typelist->class_type[@@ocaml.doc" [pcty_constr] constructs an {! Ast.Pcty_constr}\n\n{b Example OCaml}\n\n - [c]\n - [['a1, ..., 'an] c] "][@@@ocaml.text"{2 Class structure}"]valclass_structure:self:pattern->fields:class_fieldlist->class_structure[@@ocaml.doc" [class_structure] constructs an {! Ast.class_structure}\n\n{b Example OCaml}\n\n Values of type {!class_structure} represents:\n - [object(selfpat) ... end]\n - [object ... end] when {{!class_structure.pcstr_self} [pcstr_self]} is\n {{!pattern_desc.Ppat_any} [Ppat_any]} "][@@@ocaml.text"{2 Class signature}"]valclass_signature:self:core_type->fields:class_type_fieldlist->class_signature[@@ocaml.doc" [class_signature] constructs an {! Ast.class_signature}\n\n{b Example OCaml}\n\n Values of type [class_signature] represents:\n - [object('selfpat) ... end]\n - [object ... end] when {{!class_signature.pcsig_self} [pcsig_self]} is\n {{!core_type_desc.Ptyp_any} [Ptyp_any]} "][@@@ocaml.text"{2 Class field}"]valpcf_extension:extension->class_field[@@ocaml.doc" [pcf_extension] constructs an {! Ast.Pcf_extension}\n\n{b Example OCaml}\n\n [[%%id]] "]valpcf_attribute:attribute->class_field[@@ocaml.doc" [pcf_attribute] constructs an {! Ast.Pcf_attribute}\n\n{b Example OCaml}\n\n [[\\@\\@\\@id]] "]valpcf_initializer:expression->class_field[@@ocaml.doc" [pcf_initializer] constructs an {! Ast.Pcf_initializer}\n\n{b Example OCaml}\n\n [initializer E] "]valpcf_constraint:(core_type*core_type)->class_field[@@ocaml.doc" [pcf_constraint] constructs an {! Ast.Pcf_constraint}\n\n{b Example OCaml}\n\n [constraint T1 = T2] "]valpcf_method:(labelloc*private_flag*class_field_kind)->class_field[@@ocaml.doc" [pcf_method] constructs an {! Ast.Pcf_method}\n\n{b Example OCaml}\n\n - [method x = E] ([E] can be a\n {{!expression_desc.Pexp_poly} [Pexp_poly]})\n - [method virtual x: T] ([T] can be a\n {{!core_type_desc.Ptyp_poly} [Ptyp_poly]}) "]valpcf_val:(labelloc*mutable_flag*class_field_kind)->class_field[@@ocaml.doc" [pcf_val] constructs an {! Ast.Pcf_val}\n\n{b Example OCaml}\n\n [Pcf_val(x,flag, kind)] represents:\n\n - [val x = E] when [flag] is\n {{!Asttypes.mutable_flag.Immutable} [Immutable]} and [kind] is\n {{!class_field_kind.Cfk_concrete} [Cfk_concrete(Fresh, E)]}\n - [val virtual x: T] when [flag] is\n {{!Asttypes.mutable_flag.Immutable} [Immutable]} and [kind] is\n {{!class_field_kind.Cfk_virtual} [Cfk_virtual(T)]}\n - [val mutable x = E] when [flag] is\n {{!Asttypes.mutable_flag.Mutable} [Mutable]} and [kind] is\n {{!class_field_kind.Cfk_concrete} [Cfk_concrete(Fresh, E)]}\n - [val mutable virtual x: T] when [flag] is\n {{!Asttypes.mutable_flag.Mutable} [Mutable]} and [kind] is\n {{!class_field_kind.Cfk_virtual} [Cfk_virtual(T)]} "]valpcf_inherit:override_flag->class_expr->stringlocoption->class_field[@@ocaml.doc" [pcf_inherit] constructs an {! Ast.Pcf_inherit}\n\n{b Example OCaml}\n\n [Pcf_inherit(flag, CE, s)] represents:\n\n - [inherit CE] when [flag] is\n {{!Asttypes.override_flag.Fresh} [Fresh]} and [s] is [None],\n - [inherit CE as x] when [flag] is\n {{!Asttypes.override_flag.Fresh} [Fresh]} and [s] is [Some x],\n - [inherit! CE] when [flag] is\n {{!Asttypes.override_flag.Override} [Override]} and [s] is [None],\n - [inherit! CE as x] when [flag] is\n {{!Asttypes.override_flag.Override} [Override]} and [s] is [Some x]\n "][@@@ocaml.text"{2 Class expr}"]valpcl_open:open_description->class_expr->class_expr[@@ocaml.doc" [pcl_open] constructs an {! Ast.Pcl_open}\n\n{b Example OCaml}\n\n [let open M in CE] "]valpcl_extension:extension->class_expr[@@ocaml.doc" [pcl_extension] constructs an {! Ast.Pcl_extension}\n\n{b Example OCaml}\n\n [[%id]] "]valpcl_constraint:class_expr->class_type->class_expr[@@ocaml.doc" [pcl_constraint] constructs an {! Ast.Pcl_constraint}\n\n{b Example OCaml}\n\n [(CE : CT)] "]valpcl_let:rec_flag->value_bindinglist->class_expr->class_expr[@@ocaml.doc" [pcl_let] constructs an {! Ast.Pcl_let}\n\n{b Example OCaml}\n\n [Pcl_let(rec, [(P1, E1); ... ; (Pn, En)], CE)] represents:\n - [let P1 = E1 and ... and Pn = EN in CE] when [rec] is\n {{!Asttypes.rec_flag.Nonrecursive} [Nonrecursive]},\n - [let rec P1 = E1 and ... and Pn = EN in CE] when [rec] is\n {{!Asttypes.rec_flag.Recursive} [Recursive]}. "]valpcl_apply:class_expr->(arg_label*expression)list->class_expr[@@ocaml.doc" [pcl_apply] constructs an {! Ast.Pcl_apply}\n\n{b Example OCaml}\n\n [Pcl_apply(CE, [(l1,E1) ; ... ; (ln,En)])] represents\n [CE ~l1:E1 ... ~ln:En]. [li] can be empty (non labeled argument) or\n start with [?] (optional argument).\n\n Invariant: [n > 0] "]valpcl_fun:arg_label->expressionoption->pattern->class_expr->class_expr[@@ocaml.doc" [pcl_fun] constructs an {! Ast.Pcl_fun}\n\n{b Example OCaml}\n\n [Pcl_fun(lbl, exp0, P, CE)] represents:\n - [fun P -> CE] when [lbl] is\n {{!Asttypes.arg_label.Nolabel} [Nolabel]} and [exp0] is [None],\n - [fun ~l:P -> CE] when [lbl] is\n {{!Asttypes.arg_label.Labelled} [Labelled l]} and [exp0] is [None],\n - [fun ?l:P -> CE] when [lbl] is\n {{!Asttypes.arg_label.Optional} [Optional l]} and [exp0] is [None],\n - [fun ?l:(P = E0) -> CE] when [lbl] is\n {{!Asttypes.arg_label.Optional} [Optional l]} and [exp0] is\n [Some E0]. "]valpcl_structure:class_structure->class_expr[@@ocaml.doc" [pcl_structure] constructs an {! Ast.Pcl_structure}\n\n{b Example OCaml}\n\n [object ... end] "]valpcl_constr:longidentloc->core_typelist->class_expr[@@ocaml.doc" [pcl_constr] constructs an {! Ast.Pcl_constr}\n\n{b Example OCaml}\n\n [c] and [['a1, ..., 'an] c] "][@@@ocaml.text"{2 Case}"]valcase:lhs:pattern->guard:expressionoption->rhs:expression->case[@@ocaml.doc" [case] constructs an {! Ast.case}\n\n{b Example OCaml}\n\n Values of type {!case} represents [(P -> E)] or [(P when E0 -> E)] "][@@@ocaml.text"{2 Binding op}"]valbinding_op:op:stringloc->pat:pattern->exp:expression->binding_op[@@ocaml.doc" [binding_op] constructs an {! Ast.binding_op}\n\n "][@@@ocaml.text"{2 Attribute}"]valattribute:name:stringloc->payload:payload->attribute[@@ocaml.doc" [attribute] constructs an {! Ast.attribute}\n\n{b Example OCaml}\n\n Attributes such as [[\\@id ARG]] and [[\\@\\@id ARG]].\n\n Metadata containers passed around within the AST. The compiler ignores\n unknown attributes. "][@@@ocaml.text"{2 'a open infos}"]valopen_infos:expr:'a->override:override_flag->'aopen_infos[@@ocaml.doc" [open_infos] constructs an {! Ast.'a open_infos}\n\n{b Example OCaml}\n\n Values of type ['a open_infos] represents:\n - [open! X] when {{!open_infos.popen_override} [popen_override]} is\n {{!Asttypes.override_flag.Override} [Override]} (silences the \"used\n identifier shadowing\" warning)\n - [open X] when {{!open_infos.popen_override} [popen_override]} is\n {{!Asttypes.override_flag.Fresh} [Fresh]} "][@@@ocaml.text"{2 'a include infos}"]valinclude_infos:'a->'ainclude_infos[@@ocaml.doc" [include_infos] constructs an {! Ast.'a include_infos}\n\n "][@@@ocaml.text"{2 'a class infos}"]valclass_infos:virt:virtual_flag->params:(core_type*(variance*injectivity))list->name:stringloc->expr:'a->'aclass_infos[@@ocaml.doc" [class_infos] constructs an {! Ast.'a class_infos}\n\n{b Example OCaml}\n\n Values of type [class_expr class_infos] represents:\n - [class c = ...]\n - [class ['a1,...,'an] c = ...]\n - [class virtual c = ...]\n\n They are also used for \"class type\" declaration. "]endmoduleM:Intf=structletattribute~loc~name~payload={attr_name=name;attr_payload=payload;attr_loc=loc}letbinding_op~loc~op~pat~exp={pbop_op=op;pbop_pat=pat;pbop_exp=exp;pbop_loc=loc}letcase~lhs~guard~rhs={pc_lhs=lhs;pc_guard=guard;pc_rhs=rhs}letpcl_constr~locx0x1={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_constr(x0,x1))}letpcl_structure~locx0={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_structurex0)}letpcl_fun~locx0x1x2x3={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_fun(x0,x1,x2,x3))}letpcl_apply~locx0x1={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_apply(x0,x1))}letpcl_let~locx0x1x2={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_let(x0,x1,x2))}letpcl_constraint~locx0x1={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_constraint(x0,x1))}letpcl_extension~locx0={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_extensionx0)}letpcl_open~locx0x1={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_open(x0,x1))}letpcf_inherit~locx0x1x2={pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_inherit(x0,x1,x2))}letpcf_val~locx0={pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_valx0)}letpcf_method~locx0={pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_methodx0)}letpcf_constraint~locx0={pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_constraintx0)}letpcf_initializer~locx0={pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_initializerx0)}letpcf_attribute~locx0={pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_attributex0)}letpcf_extension~locx0={pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_extensionx0)}letclass_infos~loc~virt~params~name~expr={pci_virt=virt;pci_params=params;pci_name=name;pci_expr=expr;pci_loc=loc;pci_attributes=[]}letclass_signature~self~fields={pcsig_self=self;pcsig_fields=fields}letclass_structure~self~fields={pcstr_self=self;pcstr_fields=fields}letpcty_constr~locx0x1={pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_constr(x0,x1))}letpcty_signature~locx0={pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_signaturex0)}letpcty_arrow~locx0x1x2={pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_arrow(x0,x1,x2))}letpcty_extension~locx0={pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_extensionx0)}letpcty_open~locx0x1={pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_open(x0,x1))}letpctf_inherit~locx0={pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_inheritx0)}letpctf_val~locx0={pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_valx0)}letpctf_method~locx0={pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_methodx0)}letpctf_constraint~locx0={pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_constraintx0)}letpctf_attribute~locx0={pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_attributex0)}letpctf_extension~locx0={pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_extensionx0)}letconstructor_declaration~loc~name~vars~args~res={pcd_name=name;pcd_vars=vars;pcd_args=args;pcd_res=res;pcd_loc=loc;pcd_attributes=[]}letptyp_any~loc={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=Ptyp_any}letptyp_var~locx0={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_varx0)}letptyp_arrow~locx0x1x2={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_arrow(x0,x1,x2))}letptyp_tuple~locx0={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_tuplex0)}letptyp_constr~locx0x1={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_constr(x0,x1))}letptyp_object~locx0x1={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_object(x0,x1))}letptyp_class~locx0x1={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_class(x0,x1))}letptyp_alias~locx0x1={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_alias(x0,x1))}letptyp_variant~locx0x1x2={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_variant(x0,x1,x2))}letptyp_poly~locx0x1={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_poly(x0,x1))}letptyp_package~locx0={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_packagex0)}letptyp_open~locx0x1={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_open(x0,x1))}letptyp_extension~locx0={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_extensionx0)}letpdir_string~locx0={pdira_loc=loc;pdira_desc=(Pdir_stringx0)}letpdir_int~locx0x1={pdira_loc=loc;pdira_desc=(Pdir_int(x0,x1))}letpdir_ident~locx0={pdira_loc=loc;pdira_desc=(Pdir_identx0)}letpdir_bool~locx0={pdira_loc=loc;pdira_desc=(Pdir_boolx0)}letpexp_ident~locx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_identx0)}letpexp_constant~locx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_constantx0)}letpexp_let~locx0x1x2={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_let(x0,x1,x2))}letpexp_function~locx0x1x2={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_function(x0,x1,x2))}letpexp_apply~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_apply(x0,x1))}letpexp_match~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_match(x0,x1))}letpexp_try~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_try(x0,x1))}letpexp_tuple~locx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_tuplex0)}letpexp_construct~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_construct(x0,x1))}letpexp_variant~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_variant(x0,x1))}letpexp_record~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_record(x0,x1))}letpexp_field~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_field(x0,x1))}letpexp_setfield~locx0x1x2={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_setfield(x0,x1,x2))}letpexp_array~locx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_arrayx0)}letpexp_ifthenelse~locx0x1x2={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_ifthenelse(x0,x1,x2))}letpexp_sequence~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_sequence(x0,x1))}letpexp_while~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_while(x0,x1))}letpexp_for~locx0x1x2x3x4={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_for(x0,x1,x2,x3,x4))}letpexp_constraint~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_constraint(x0,x1))}letpexp_coerce~locx0x1x2={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_coerce(x0,x1,x2))}letpexp_send~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_send(x0,x1))}letpexp_new~locx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_newx0)}letpexp_setinstvar~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_setinstvar(x0,x1))}letpexp_override~locx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_overridex0)}letpexp_letmodule~locx0x1x2={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_letmodule(x0,x1,x2))}letpexp_letexception~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_letexception(x0,x1))}letpexp_assert~locx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_assertx0)}letpexp_lazy~locx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_lazyx0)}letpexp_poly~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_poly(x0,x1))}letpexp_object~locx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_objectx0)}letpexp_newtype~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_newtype(x0,x1))}letpexp_pack~locx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_packx0)}letpexp_open~locx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_open(x0,x1))}letpexp_letop~locx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_letopx0)}letpexp_extension~locx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_extensionx0)}letpexp_unreachable~loc={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=Pexp_unreachable}letextension_constructor~loc~name~kind={pext_name=name;pext_kind=kind;pext_loc=loc;pext_attributes=[]}letpparam_val~locx0x1x2={pparam_loc=loc;pparam_desc=(Pparam_val(x0,x1,x2))}letpparam_newtype~locx0={pparam_loc=loc;pparam_desc=(Pparam_newtypex0)}letinclude_infos~locmod_={pincl_mod=mod_;pincl_loc=loc;pincl_attributes=[]}letlabel_declaration~loc~name~mutable_~type_={pld_name=name;pld_mutable=mutable_;pld_type=type_;pld_loc=loc;pld_attributes=[]}letletop~let_~ands~body={let_;ands;body}letlocation~start~end_~ghost={loc_start=start;loc_end=end_;loc_ghost=ghost}letmodule_binding~loc~name~expr={pmb_name=name;pmb_expr=expr;pmb_attributes=[];pmb_loc=loc}letmodule_declaration~loc~name~type_={pmd_name=name;pmd_type=type_;pmd_attributes=[];pmd_loc=loc}letpmod_ident~locx0={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_identx0)}letpmod_structure~locx0={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_structurex0)}letpmod_functor~locx0x1={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_functor(x0,x1))}letpmod_apply~locx0x1={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_apply(x0,x1))}letpmod_apply_unit~locx0={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_apply_unitx0)}letpmod_constraint~locx0x1={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_constraint(x0,x1))}letpmod_unpack~locx0={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_unpackx0)}letpmod_extension~locx0={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_extensionx0)}letmodule_substitution~loc~name~manifest={pms_name=name;pms_manifest=manifest;pms_attributes=[];pms_loc=loc}letpmty_ident~locx0={pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_identx0)}letpmty_signature~locx0={pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_signaturex0)}letpmty_functor~locx0x1={pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_functor(x0,x1))}letpmty_with~locx0x1={pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_with(x0,x1))}letpmty_typeof~locx0={pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_typeofx0)}letpmty_extension~locx0={pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_extensionx0)}letpmty_alias~locx0={pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_aliasx0)}letmodule_type_declaration~loc~name~type_={pmtd_name=name;pmtd_type=type_;pmtd_attributes=[];pmtd_loc=loc}letotag~locx0x1={pof_attributes=[];pof_loc=loc;pof_desc=(Otag(x0,x1))}letoinherit~locx0={pof_attributes=[];pof_loc=loc;pof_desc=(Oinheritx0)}letopen_infos~loc~expr~override={popen_expr=expr;popen_override=override;popen_loc=loc;popen_attributes=[]}letppat_any~loc={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=Ppat_any}letppat_var~locx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_varx0)}letppat_alias~locx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_alias(x0,x1))}letppat_constant~locx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_constantx0)}letppat_interval~locx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_interval(x0,x1))}letppat_tuple~locx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_tuplex0)}letppat_construct~locx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_construct(x0,x1))}letppat_variant~locx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_variant(x0,x1))}letppat_record~locx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_record(x0,x1))}letppat_array~locx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_arrayx0)}letppat_or~locx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_or(x0,x1))}letppat_constraint~locx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_constraint(x0,x1))}letppat_type~locx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_typex0)}letppat_lazy~locx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_lazyx0)}letppat_unpack~locx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_unpackx0)}letppat_exception~locx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_exceptionx0)}letppat_extension~locx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_extensionx0)}letppat_open~locx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_open(x0,x1))}letposition~fname~lnum~bol~cnum={pos_fname=fname;pos_lnum=lnum;pos_bol=bol;pos_cnum=cnum}letrtag~locx0x1x2={prf_attributes=[];prf_loc=loc;prf_desc=(Rtag(x0,x1,x2))}letrinherit~locx0={prf_attributes=[];prf_loc=loc;prf_desc=(Rinheritx0)}letpsig_value~locx0={psig_loc=loc;psig_desc=(Psig_valuex0)}letpsig_type~locx0x1={psig_loc=loc;psig_desc=(Psig_type(x0,x1))}letpsig_typesubst~locx0={psig_loc=loc;psig_desc=(Psig_typesubstx0)}letpsig_typext~locx0={psig_loc=loc;psig_desc=(Psig_typextx0)}letpsig_exception~locx0={psig_loc=loc;psig_desc=(Psig_exceptionx0)}letpsig_module~locx0={psig_loc=loc;psig_desc=(Psig_modulex0)}letpsig_modsubst~locx0={psig_loc=loc;psig_desc=(Psig_modsubstx0)}letpsig_recmodule~locx0={psig_loc=loc;psig_desc=(Psig_recmodulex0)}letpsig_modtype~locx0={psig_loc=loc;psig_desc=(Psig_modtypex0)}letpsig_modtypesubst~locx0={psig_loc=loc;psig_desc=(Psig_modtypesubstx0)}letpsig_open~locx0={psig_loc=loc;psig_desc=(Psig_openx0)}letpsig_include~locx0={psig_loc=loc;psig_desc=(Psig_includex0)}letpsig_class~locx0={psig_loc=loc;psig_desc=(Psig_classx0)}letpsig_class_type~locx0={psig_loc=loc;psig_desc=(Psig_class_typex0)}letpsig_attribute~locx0={psig_loc=loc;psig_desc=(Psig_attributex0)}letpsig_extension~locx0x1={psig_loc=loc;psig_desc=(Psig_extension(x0,x1))}letpstr_eval~locx0x1={pstr_loc=loc;pstr_desc=(Pstr_eval(x0,x1))}letpstr_value~locx0x1={pstr_loc=loc;pstr_desc=(Pstr_value(x0,x1))}letpstr_primitive~locx0={pstr_loc=loc;pstr_desc=(Pstr_primitivex0)}letpstr_type~locx0x1={pstr_loc=loc;pstr_desc=(Pstr_type(x0,x1))}letpstr_typext~locx0={pstr_loc=loc;pstr_desc=(Pstr_typextx0)}letpstr_exception~locx0={pstr_loc=loc;pstr_desc=(Pstr_exceptionx0)}letpstr_module~locx0={pstr_loc=loc;pstr_desc=(Pstr_modulex0)}letpstr_recmodule~locx0={pstr_loc=loc;pstr_desc=(Pstr_recmodulex0)}letpstr_modtype~locx0={pstr_loc=loc;pstr_desc=(Pstr_modtypex0)}letpstr_open~locx0={pstr_loc=loc;pstr_desc=(Pstr_openx0)}letpstr_class~locx0={pstr_loc=loc;pstr_desc=(Pstr_classx0)}letpstr_class_type~locx0={pstr_loc=loc;pstr_desc=(Pstr_class_typex0)}letpstr_include~locx0={pstr_loc=loc;pstr_desc=(Pstr_includex0)}letpstr_attribute~locx0={pstr_loc=loc;pstr_desc=(Pstr_attributex0)}letpstr_extension~locx0x1={pstr_loc=loc;pstr_desc=(Pstr_extension(x0,x1))}lettoplevel_directive~loc~name~arg={pdir_name=name;pdir_arg=arg;pdir_loc=loc}lettype_declaration~loc~name~params~cstrs~kind~private_~manifest={ptype_name=name;ptype_params=params;ptype_cstrs=cstrs;ptype_kind=kind;ptype_private=private_;ptype_manifest=manifest;ptype_attributes=[];ptype_loc=loc}lettype_exception~locconstructor={ptyexn_constructor=constructor;ptyexn_loc=loc;ptyexn_attributes=[]}lettype_extension~loc~path~params~constructors~private_={ptyext_path=path;ptyext_params=params;ptyext_constructors=constructors;ptyext_private=private_;ptyext_loc=loc;ptyext_attributes=[]}letvalue_binding~loc~pat~expr~constraint_={pvb_pat=pat;pvb_expr=expr;pvb_constraint=constraint_;pvb_attributes=[];pvb_loc=loc}letvalue_description~loc~name~type_~prim={pval_name=name;pval_type=type_;pval_prim=prim;pval_attributes=[];pval_loc=loc}endmoduleMake(Loc:sigvalloc:Location.tend):Intf_located=structletloc=Loc.locletattribute~name~payload={attr_name=name;attr_payload=payload;attr_loc=loc}letbinding_op~op~pat~exp={pbop_op=op;pbop_pat=pat;pbop_exp=exp;pbop_loc=loc}letcase~lhs~guard~rhs={pc_lhs=lhs;pc_guard=guard;pc_rhs=rhs}letpcl_constrx0x1={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_constr(x0,x1))}letpcl_structurex0={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_structurex0)}letpcl_funx0x1x2x3={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_fun(x0,x1,x2,x3))}letpcl_applyx0x1={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_apply(x0,x1))}letpcl_letx0x1x2={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_let(x0,x1,x2))}letpcl_constraintx0x1={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_constraint(x0,x1))}letpcl_extensionx0={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_extensionx0)}letpcl_openx0x1={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_open(x0,x1))}letpcf_inheritx0x1x2={pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_inherit(x0,x1,x2))}letpcf_valx0={pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_valx0)}letpcf_methodx0={pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_methodx0)}letpcf_constraintx0={pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_constraintx0)}letpcf_initializerx0={pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_initializerx0)}letpcf_attributex0={pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_attributex0)}letpcf_extensionx0={pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_extensionx0)}letclass_infos~virt~params~name~expr={pci_virt=virt;pci_params=params;pci_name=name;pci_expr=expr;pci_loc=loc;pci_attributes=[]}letclass_signature~self~fields={pcsig_self=self;pcsig_fields=fields}letclass_structure~self~fields={pcstr_self=self;pcstr_fields=fields}letpcty_constrx0x1={pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_constr(x0,x1))}letpcty_signaturex0={pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_signaturex0)}letpcty_arrowx0x1x2={pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_arrow(x0,x1,x2))}letpcty_extensionx0={pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_extensionx0)}letpcty_openx0x1={pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_open(x0,x1))}letpctf_inheritx0={pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_inheritx0)}letpctf_valx0={pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_valx0)}letpctf_methodx0={pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_methodx0)}letpctf_constraintx0={pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_constraintx0)}letpctf_attributex0={pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_attributex0)}letpctf_extensionx0={pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_extensionx0)}letconstructor_declaration~name~vars~args~res={pcd_name=name;pcd_vars=vars;pcd_args=args;pcd_res=res;pcd_loc=loc;pcd_attributes=[]}letptyp_any={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=Ptyp_any}letptyp_varx0={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_varx0)}letptyp_arrowx0x1x2={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_arrow(x0,x1,x2))}letptyp_tuplex0={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_tuplex0)}letptyp_constrx0x1={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_constr(x0,x1))}letptyp_objectx0x1={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_object(x0,x1))}letptyp_classx0x1={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_class(x0,x1))}letptyp_aliasx0x1={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_alias(x0,x1))}letptyp_variantx0x1x2={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_variant(x0,x1,x2))}letptyp_polyx0x1={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_poly(x0,x1))}letptyp_packagex0={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_packagex0)}letptyp_openx0x1={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_open(x0,x1))}letptyp_extensionx0={ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_extensionx0)}letpdir_stringx0={pdira_loc=loc;pdira_desc=(Pdir_stringx0)}letpdir_intx0x1={pdira_loc=loc;pdira_desc=(Pdir_int(x0,x1))}letpdir_identx0={pdira_loc=loc;pdira_desc=(Pdir_identx0)}letpdir_boolx0={pdira_loc=loc;pdira_desc=(Pdir_boolx0)}letpexp_identx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_identx0)}letpexp_constantx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_constantx0)}letpexp_letx0x1x2={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_let(x0,x1,x2))}letpexp_functionx0x1x2={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_function(x0,x1,x2))}letpexp_applyx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_apply(x0,x1))}letpexp_matchx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_match(x0,x1))}letpexp_tryx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_try(x0,x1))}letpexp_tuplex0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_tuplex0)}letpexp_constructx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_construct(x0,x1))}letpexp_variantx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_variant(x0,x1))}letpexp_recordx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_record(x0,x1))}letpexp_fieldx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_field(x0,x1))}letpexp_setfieldx0x1x2={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_setfield(x0,x1,x2))}letpexp_arrayx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_arrayx0)}letpexp_ifthenelsex0x1x2={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_ifthenelse(x0,x1,x2))}letpexp_sequencex0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_sequence(x0,x1))}letpexp_whilex0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_while(x0,x1))}letpexp_forx0x1x2x3x4={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_for(x0,x1,x2,x3,x4))}letpexp_constraintx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_constraint(x0,x1))}letpexp_coercex0x1x2={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_coerce(x0,x1,x2))}letpexp_sendx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_send(x0,x1))}letpexp_newx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_newx0)}letpexp_setinstvarx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_setinstvar(x0,x1))}letpexp_overridex0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_overridex0)}letpexp_letmodulex0x1x2={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_letmodule(x0,x1,x2))}letpexp_letexceptionx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_letexception(x0,x1))}letpexp_assertx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_assertx0)}letpexp_lazyx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_lazyx0)}letpexp_polyx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_poly(x0,x1))}letpexp_objectx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_objectx0)}letpexp_newtypex0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_newtype(x0,x1))}letpexp_packx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_packx0)}letpexp_openx0x1={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_open(x0,x1))}letpexp_letopx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_letopx0)}letpexp_extensionx0={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_extensionx0)}letpexp_unreachable={pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=Pexp_unreachable}letextension_constructor~name~kind={pext_name=name;pext_kind=kind;pext_loc=loc;pext_attributes=[]}letpparam_valx0x1x2={pparam_loc=loc;pparam_desc=(Pparam_val(x0,x1,x2))}letpparam_newtypex0={pparam_loc=loc;pparam_desc=(Pparam_newtypex0)}letinclude_infosmod_={pincl_mod=mod_;pincl_loc=loc;pincl_attributes=[]}letlabel_declaration~name~mutable_~type_={pld_name=name;pld_mutable=mutable_;pld_type=type_;pld_loc=loc;pld_attributes=[]}letletop~let_~ands~body={let_;ands;body}letlocation~start~end_~ghost={loc_start=start;loc_end=end_;loc_ghost=ghost}letmodule_binding~name~expr={pmb_name=name;pmb_expr=expr;pmb_attributes=[];pmb_loc=loc}letmodule_declaration~name~type_={pmd_name=name;pmd_type=type_;pmd_attributes=[];pmd_loc=loc}letpmod_identx0={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_identx0)}letpmod_structurex0={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_structurex0)}letpmod_functorx0x1={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_functor(x0,x1))}letpmod_applyx0x1={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_apply(x0,x1))}letpmod_apply_unitx0={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_apply_unitx0)}letpmod_constraintx0x1={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_constraint(x0,x1))}letpmod_unpackx0={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_unpackx0)}letpmod_extensionx0={pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_extensionx0)}letmodule_substitution~name~manifest={pms_name=name;pms_manifest=manifest;pms_attributes=[];pms_loc=loc}letpmty_identx0={pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_identx0)}letpmty_signaturex0={pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_signaturex0)}letpmty_functorx0x1={pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_functor(x0,x1))}letpmty_withx0x1={pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_with(x0,x1))}letpmty_typeofx0={pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_typeofx0)}letpmty_extensionx0={pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_extensionx0)}letpmty_aliasx0={pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_aliasx0)}letmodule_type_declaration~name~type_={pmtd_name=name;pmtd_type=type_;pmtd_attributes=[];pmtd_loc=loc}letotagx0x1={pof_attributes=[];pof_loc=loc;pof_desc=(Otag(x0,x1))}letoinheritx0={pof_attributes=[];pof_loc=loc;pof_desc=(Oinheritx0)}letopen_infos~expr~override={popen_expr=expr;popen_override=override;popen_loc=loc;popen_attributes=[]}letppat_any={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=Ppat_any}letppat_varx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_varx0)}letppat_aliasx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_alias(x0,x1))}letppat_constantx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_constantx0)}letppat_intervalx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_interval(x0,x1))}letppat_tuplex0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_tuplex0)}letppat_constructx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_construct(x0,x1))}letppat_variantx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_variant(x0,x1))}letppat_recordx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_record(x0,x1))}letppat_arrayx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_arrayx0)}letppat_orx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_or(x0,x1))}letppat_constraintx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_constraint(x0,x1))}letppat_typex0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_typex0)}letppat_lazyx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_lazyx0)}letppat_unpackx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_unpackx0)}letppat_exceptionx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_exceptionx0)}letppat_extensionx0={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_extensionx0)}letppat_openx0x1={ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_open(x0,x1))}letposition~fname~lnum~bol~cnum={pos_fname=fname;pos_lnum=lnum;pos_bol=bol;pos_cnum=cnum}letrtagx0x1x2={prf_attributes=[];prf_loc=loc;prf_desc=(Rtag(x0,x1,x2))}letrinheritx0={prf_attributes=[];prf_loc=loc;prf_desc=(Rinheritx0)}letpsig_valuex0={psig_loc=loc;psig_desc=(Psig_valuex0)}letpsig_typex0x1={psig_loc=loc;psig_desc=(Psig_type(x0,x1))}letpsig_typesubstx0={psig_loc=loc;psig_desc=(Psig_typesubstx0)}letpsig_typextx0={psig_loc=loc;psig_desc=(Psig_typextx0)}letpsig_exceptionx0={psig_loc=loc;psig_desc=(Psig_exceptionx0)}letpsig_modulex0={psig_loc=loc;psig_desc=(Psig_modulex0)}letpsig_modsubstx0={psig_loc=loc;psig_desc=(Psig_modsubstx0)}letpsig_recmodulex0={psig_loc=loc;psig_desc=(Psig_recmodulex0)}letpsig_modtypex0={psig_loc=loc;psig_desc=(Psig_modtypex0)}letpsig_modtypesubstx0={psig_loc=loc;psig_desc=(Psig_modtypesubstx0)}letpsig_openx0={psig_loc=loc;psig_desc=(Psig_openx0)}letpsig_includex0={psig_loc=loc;psig_desc=(Psig_includex0)}letpsig_classx0={psig_loc=loc;psig_desc=(Psig_classx0)}letpsig_class_typex0={psig_loc=loc;psig_desc=(Psig_class_typex0)}letpsig_attributex0={psig_loc=loc;psig_desc=(Psig_attributex0)}letpsig_extensionx0x1={psig_loc=loc;psig_desc=(Psig_extension(x0,x1))}letpstr_evalx0x1={pstr_loc=loc;pstr_desc=(Pstr_eval(x0,x1))}letpstr_valuex0x1={pstr_loc=loc;pstr_desc=(Pstr_value(x0,x1))}letpstr_primitivex0={pstr_loc=loc;pstr_desc=(Pstr_primitivex0)}letpstr_typex0x1={pstr_loc=loc;pstr_desc=(Pstr_type(x0,x1))}letpstr_typextx0={pstr_loc=loc;pstr_desc=(Pstr_typextx0)}letpstr_exceptionx0={pstr_loc=loc;pstr_desc=(Pstr_exceptionx0)}letpstr_modulex0={pstr_loc=loc;pstr_desc=(Pstr_modulex0)}letpstr_recmodulex0={pstr_loc=loc;pstr_desc=(Pstr_recmodulex0)}letpstr_modtypex0={pstr_loc=loc;pstr_desc=(Pstr_modtypex0)}letpstr_openx0={pstr_loc=loc;pstr_desc=(Pstr_openx0)}letpstr_classx0={pstr_loc=loc;pstr_desc=(Pstr_classx0)}letpstr_class_typex0={pstr_loc=loc;pstr_desc=(Pstr_class_typex0)}letpstr_includex0={pstr_loc=loc;pstr_desc=(Pstr_includex0)}letpstr_attributex0={pstr_loc=loc;pstr_desc=(Pstr_attributex0)}letpstr_extensionx0x1={pstr_loc=loc;pstr_desc=(Pstr_extension(x0,x1))}lettoplevel_directive~name~arg={pdir_name=name;pdir_arg=arg;pdir_loc=loc}lettype_declaration~name~params~cstrs~kind~private_~manifest={ptype_name=name;ptype_params=params;ptype_cstrs=cstrs;ptype_kind=kind;ptype_private=private_;ptype_manifest=manifest;ptype_attributes=[];ptype_loc=loc}lettype_exceptionconstructor={ptyexn_constructor=constructor;ptyexn_loc=loc;ptyexn_attributes=[]}lettype_extension~path~params~constructors~private_={ptyext_path=path;ptyext_params=params;ptyext_constructors=constructors;ptyext_private=private_;ptyext_loc=loc;ptyext_attributes=[]}letvalue_binding~pat~expr~constraint_={pvb_pat=pat;pvb_expr=expr;pvb_constraint=constraint_;pvb_attributes=[];pvb_loc=loc}letvalue_description~name~type_~prim={pval_name=name;pval_type=type_;pval_prim=prim;pval_attributes=[];pval_loc=loc}end