12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143openImportmoduletypeIntf=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=fun~name->fun~payload->{attr_name=name;attr_payload=payload;attr_loc=loc}letbinding_op~loc=fun~op->fun~pat->fun~exp->{pbop_op=op;pbop_pat=pat;pbop_exp=exp;pbop_loc=loc}letcase~lhs=fun~guard->fun~rhs->{pc_lhs=lhs;pc_guard=guard;pc_rhs=rhs}letpcl_constr~loc=funx0->funx1->{pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_constr(x0,x1))}letpcl_structure~loc=funx0->{pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_structurex0)}letpcl_fun~loc=funx0->funx1->funx2->funx3->{pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_fun(x0,x1,x2,x3))}letpcl_apply~loc=funx0->funx1->{pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_apply(x0,x1))}letpcl_let~loc=funx0->funx1->funx2->{pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_let(x0,x1,x2))}letpcl_constraint~loc=funx0->funx1->{pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_constraint(x0,x1))}letpcl_extension~loc=funx0->{pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_extensionx0)}letpcl_open~loc=funx0->funx1->{pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_open(x0,x1))}letpcf_inherit~loc=funx0->funx1->funx2->{pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_inherit(x0,x1,x2))}letpcf_val~loc=funx0->{pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_valx0)}letpcf_method~loc=funx0->{pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_methodx0)}letpcf_constraint~loc=funx0->{pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_constraintx0)}letpcf_initializer~loc=funx0->{pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_initializerx0)}letpcf_attribute~loc=funx0->{pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_attributex0)}letpcf_extension~loc=funx0->{pcf_attributes=[];pcf_loc=loc;pcf_desc=(Pcf_extensionx0)}letclass_infos~loc=fun~virt->fun~params->fun~name->fun~expr->{pci_virt=virt;pci_params=params;pci_name=name;pci_expr=expr;pci_loc=loc;pci_attributes=[]}letclass_signature~self=fun~fields->{pcsig_self=self;pcsig_fields=fields}letclass_structure~self=fun~fields->{pcstr_self=self;pcstr_fields=fields}letpcty_constr~loc=funx0->funx1->{pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_constr(x0,x1))}letpcty_signature~loc=funx0->{pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_signaturex0)}letpcty_arrow~loc=funx0->funx1->funx2->{pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_arrow(x0,x1,x2))}letpcty_extension~loc=funx0->{pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_extensionx0)}letpcty_open~loc=funx0->funx1->{pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_open(x0,x1))}letpctf_inherit~loc=funx0->{pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_inheritx0)}letpctf_val~loc=funx0->{pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_valx0)}letpctf_method~loc=funx0->{pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_methodx0)}letpctf_constraint~loc=funx0->{pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_constraintx0)}letpctf_attribute~loc=funx0->{pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_attributex0)}letpctf_extension~loc=funx0->{pctf_attributes=[];pctf_loc=loc;pctf_desc=(Pctf_extensionx0)}letconstructor_declaration~loc=fun~name->fun~vars->fun~args->fun~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~loc=funx0->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_varx0)}letptyp_arrow~loc=funx0->funx1->funx2->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_arrow(x0,x1,x2))}letptyp_tuple~loc=funx0->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_tuplex0)}letptyp_constr~loc=funx0->funx1->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_constr(x0,x1))}letptyp_object~loc=funx0->funx1->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_object(x0,x1))}letptyp_class~loc=funx0->funx1->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_class(x0,x1))}letptyp_alias~loc=funx0->funx1->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_alias(x0,x1))}letptyp_variant~loc=funx0->funx1->funx2->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_variant(x0,x1,x2))}letptyp_poly~loc=funx0->funx1->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_poly(x0,x1))}letptyp_package~loc=funx0->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_packagex0)}letptyp_open~loc=funx0->funx1->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_open(x0,x1))}letptyp_extension~loc=funx0->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_extensionx0)}letpdir_string~loc=funx0->{pdira_loc=loc;pdira_desc=(Pdir_stringx0)}letpdir_int~loc=funx0->funx1->{pdira_loc=loc;pdira_desc=(Pdir_int(x0,x1))}letpdir_ident~loc=funx0->{pdira_loc=loc;pdira_desc=(Pdir_identx0)}letpdir_bool~loc=funx0->{pdira_loc=loc;pdira_desc=(Pdir_boolx0)}letpexp_ident~loc=funx0->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_identx0)}letpexp_constant~loc=funx0->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_constantx0)}letpexp_let~loc=funx0->funx1->funx2->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_let(x0,x1,x2))}letpexp_function~loc=funx0->funx1->funx2->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_function(x0,x1,x2))}letpexp_apply~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_apply(x0,x1))}letpexp_match~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_match(x0,x1))}letpexp_try~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_try(x0,x1))}letpexp_tuple~loc=funx0->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_tuplex0)}letpexp_construct~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_construct(x0,x1))}letpexp_variant~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_variant(x0,x1))}letpexp_record~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_record(x0,x1))}letpexp_field~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_field(x0,x1))}letpexp_setfield~loc=funx0->funx1->funx2->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_setfield(x0,x1,x2))}letpexp_array~loc=funx0->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_arrayx0)}letpexp_ifthenelse~loc=funx0->funx1->funx2->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_ifthenelse(x0,x1,x2))}letpexp_sequence~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_sequence(x0,x1))}letpexp_while~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_while(x0,x1))}letpexp_for~loc=funx0->funx1->funx2->funx3->funx4->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_for(x0,x1,x2,x3,x4))}letpexp_constraint~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_constraint(x0,x1))}letpexp_coerce~loc=funx0->funx1->funx2->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_coerce(x0,x1,x2))}letpexp_send~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_send(x0,x1))}letpexp_new~loc=funx0->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_newx0)}letpexp_setinstvar~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_setinstvar(x0,x1))}letpexp_override~loc=funx0->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_overridex0)}letpexp_letmodule~loc=funx0->funx1->funx2->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_letmodule(x0,x1,x2))}letpexp_letexception~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_letexception(x0,x1))}letpexp_assert~loc=funx0->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_assertx0)}letpexp_lazy~loc=funx0->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_lazyx0)}letpexp_poly~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_poly(x0,x1))}letpexp_object~loc=funx0->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_objectx0)}letpexp_newtype~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_newtype(x0,x1))}letpexp_pack~loc=funx0->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_packx0)}letpexp_open~loc=funx0->funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_open(x0,x1))}letpexp_letop~loc=funx0->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_letopx0)}letpexp_extension~loc=funx0->{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=fun~name->fun~kind->{pext_name=name;pext_kind=kind;pext_loc=loc;pext_attributes=[]}letpparam_val~loc=funx0->funx1->funx2->{pparam_loc=loc;pparam_desc=(Pparam_val(x0,x1,x2))}letpparam_newtype~loc=funx0->{pparam_loc=loc;pparam_desc=(Pparam_newtypex0)}letinclude_infos~loc=funmod_->{pincl_mod=mod_;pincl_loc=loc;pincl_attributes=[]}letlabel_declaration~loc=fun~name->fun~mutable_->fun~type_->{pld_name=name;pld_mutable=mutable_;pld_type=type_;pld_loc=loc;pld_attributes=[]}letletop~let_=fun~ands->fun~body->{let_;ands;body}letlocation~start=fun~end_->fun~ghost->{loc_start=start;loc_end=end_;loc_ghost=ghost}letmodule_binding~loc=fun~name->fun~expr->{pmb_name=name;pmb_expr=expr;pmb_attributes=[];pmb_loc=loc}letmodule_declaration~loc=fun~name->fun~type_->{pmd_name=name;pmd_type=type_;pmd_attributes=[];pmd_loc=loc}letpmod_ident~loc=funx0->{pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_identx0)}letpmod_structure~loc=funx0->{pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_structurex0)}letpmod_functor~loc=funx0->funx1->{pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_functor(x0,x1))}letpmod_apply~loc=funx0->funx1->{pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_apply(x0,x1))}letpmod_apply_unit~loc=funx0->{pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_apply_unitx0)}letpmod_constraint~loc=funx0->funx1->{pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_constraint(x0,x1))}letpmod_unpack~loc=funx0->{pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_unpackx0)}letpmod_extension~loc=funx0->{pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_extensionx0)}letmodule_substitution~loc=fun~name->fun~manifest->{pms_name=name;pms_manifest=manifest;pms_attributes=[];pms_loc=loc}letpmty_ident~loc=funx0->{pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_identx0)}letpmty_signature~loc=funx0->{pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_signaturex0)}letpmty_functor~loc=funx0->funx1->{pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_functor(x0,x1))}letpmty_with~loc=funx0->funx1->{pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_with(x0,x1))}letpmty_typeof~loc=funx0->{pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_typeofx0)}letpmty_extension~loc=funx0->{pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_extensionx0)}letpmty_alias~loc=funx0->{pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_aliasx0)}letmodule_type_declaration~loc=fun~name->fun~type_->{pmtd_name=name;pmtd_type=type_;pmtd_attributes=[];pmtd_loc=loc}letotag~loc=funx0->funx1->{pof_attributes=[];pof_loc=loc;pof_desc=(Otag(x0,x1))}letoinherit~loc=funx0->{pof_attributes=[];pof_loc=loc;pof_desc=(Oinheritx0)}letopen_infos~loc=fun~expr->fun~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~loc=funx0->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_varx0)}letppat_alias~loc=funx0->funx1->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_alias(x0,x1))}letppat_constant~loc=funx0->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_constantx0)}letppat_interval~loc=funx0->funx1->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_interval(x0,x1))}letppat_tuple~loc=funx0->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_tuplex0)}letppat_construct~loc=funx0->funx1->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_construct(x0,x1))}letppat_variant~loc=funx0->funx1->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_variant(x0,x1))}letppat_record~loc=funx0->funx1->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_record(x0,x1))}letppat_array~loc=funx0->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_arrayx0)}letppat_or~loc=funx0->funx1->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_or(x0,x1))}letppat_constraint~loc=funx0->funx1->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_constraint(x0,x1))}letppat_type~loc=funx0->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_typex0)}letppat_lazy~loc=funx0->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_lazyx0)}letppat_unpack~loc=funx0->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_unpackx0)}letppat_exception~loc=funx0->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_exceptionx0)}letppat_extension~loc=funx0->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_extensionx0)}letppat_open~loc=funx0->funx1->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_open(x0,x1))}letposition~fname=fun~lnum->fun~bol->fun~cnum->{pos_fname=fname;pos_lnum=lnum;pos_bol=bol;pos_cnum=cnum}letrtag~loc=funx0->funx1->funx2->{prf_attributes=[];prf_loc=loc;prf_desc=(Rtag(x0,x1,x2))}letrinherit~loc=funx0->{prf_attributes=[];prf_loc=loc;prf_desc=(Rinheritx0)}letpsig_value~loc=funx0->{psig_loc=loc;psig_desc=(Psig_valuex0)}letpsig_type~loc=funx0->funx1->{psig_loc=loc;psig_desc=(Psig_type(x0,x1))}letpsig_typesubst~loc=funx0->{psig_loc=loc;psig_desc=(Psig_typesubstx0)}letpsig_typext~loc=funx0->{psig_loc=loc;psig_desc=(Psig_typextx0)}letpsig_exception~loc=funx0->{psig_loc=loc;psig_desc=(Psig_exceptionx0)}letpsig_module~loc=funx0->{psig_loc=loc;psig_desc=(Psig_modulex0)}letpsig_modsubst~loc=funx0->{psig_loc=loc;psig_desc=(Psig_modsubstx0)}letpsig_recmodule~loc=funx0->{psig_loc=loc;psig_desc=(Psig_recmodulex0)}letpsig_modtype~loc=funx0->{psig_loc=loc;psig_desc=(Psig_modtypex0)}letpsig_modtypesubst~loc=funx0->{psig_loc=loc;psig_desc=(Psig_modtypesubstx0)}letpsig_open~loc=funx0->{psig_loc=loc;psig_desc=(Psig_openx0)}letpsig_include~loc=funx0->{psig_loc=loc;psig_desc=(Psig_includex0)}letpsig_class~loc=funx0->{psig_loc=loc;psig_desc=(Psig_classx0)}letpsig_class_type~loc=funx0->{psig_loc=loc;psig_desc=(Psig_class_typex0)}letpsig_attribute~loc=funx0->{psig_loc=loc;psig_desc=(Psig_attributex0)}letpsig_extension~loc=funx0->funx1->{psig_loc=loc;psig_desc=(Psig_extension(x0,x1))}letpstr_eval~loc=funx0->funx1->{pstr_loc=loc;pstr_desc=(Pstr_eval(x0,x1))}letpstr_value~loc=funx0->funx1->{pstr_loc=loc;pstr_desc=(Pstr_value(x0,x1))}letpstr_primitive~loc=funx0->{pstr_loc=loc;pstr_desc=(Pstr_primitivex0)}letpstr_type~loc=funx0->funx1->{pstr_loc=loc;pstr_desc=(Pstr_type(x0,x1))}letpstr_typext~loc=funx0->{pstr_loc=loc;pstr_desc=(Pstr_typextx0)}letpstr_exception~loc=funx0->{pstr_loc=loc;pstr_desc=(Pstr_exceptionx0)}letpstr_module~loc=funx0->{pstr_loc=loc;pstr_desc=(Pstr_modulex0)}letpstr_recmodule~loc=funx0->{pstr_loc=loc;pstr_desc=(Pstr_recmodulex0)}letpstr_modtype~loc=funx0->{pstr_loc=loc;pstr_desc=(Pstr_modtypex0)}letpstr_open~loc=funx0->{pstr_loc=loc;pstr_desc=(Pstr_openx0)}letpstr_class~loc=funx0->{pstr_loc=loc;pstr_desc=(Pstr_classx0)}letpstr_class_type~loc=funx0->{pstr_loc=loc;pstr_desc=(Pstr_class_typex0)}letpstr_include~loc=funx0->{pstr_loc=loc;pstr_desc=(Pstr_includex0)}letpstr_attribute~loc=funx0->{pstr_loc=loc;pstr_desc=(Pstr_attributex0)}letpstr_extension~loc=funx0->funx1->{pstr_loc=loc;pstr_desc=(Pstr_extension(x0,x1))}lettoplevel_directive~loc=fun~name->fun~arg->{pdir_name=name;pdir_arg=arg;pdir_loc=loc}lettype_declaration~loc=fun~name->fun~params->fun~cstrs->fun~kind->fun~private_->fun~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~loc=funconstructor->{ptyexn_constructor=constructor;ptyexn_loc=loc;ptyexn_attributes=[]}lettype_extension~loc=fun~path->fun~params->fun~constructors->fun~private_->{ptyext_path=path;ptyext_params=params;ptyext_constructors=constructors;ptyext_private=private_;ptyext_loc=loc;ptyext_attributes=[]}letvalue_binding~loc=fun~pat->fun~expr->fun~constraint_->{pvb_pat=pat;pvb_expr=expr;pvb_constraint=constraint_;pvb_attributes=[];pvb_loc=loc}letvalue_description~loc=fun~name->fun~type_->fun~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=fun~payload->{attr_name=name;attr_payload=payload;attr_loc=loc}letbinding_op~op=fun~pat->fun~exp->{pbop_op=op;pbop_pat=pat;pbop_exp=exp;pbop_loc=loc}letcase~lhs=fun~guard->fun~rhs->{pc_lhs=lhs;pc_guard=guard;pc_rhs=rhs}letpcl_constrx0=funx1->{pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_constr(x0,x1))}letpcl_structurex0={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_structurex0)}letpcl_funx0=funx1->funx2->funx3->{pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_fun(x0,x1,x2,x3))}letpcl_applyx0=funx1->{pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_apply(x0,x1))}letpcl_letx0=funx1->funx2->{pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_let(x0,x1,x2))}letpcl_constraintx0=funx1->{pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_constraint(x0,x1))}letpcl_extensionx0={pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_extensionx0)}letpcl_openx0=funx1->{pcl_attributes=[];pcl_loc=loc;pcl_desc=(Pcl_open(x0,x1))}letpcf_inheritx0=funx1->funx2->{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=fun~params->fun~name->fun~expr->{pci_virt=virt;pci_params=params;pci_name=name;pci_expr=expr;pci_loc=loc;pci_attributes=[]}letclass_signature~self=fun~fields->{pcsig_self=self;pcsig_fields=fields}letclass_structure~self=fun~fields->{pcstr_self=self;pcstr_fields=fields}letpcty_constrx0=funx1->{pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_constr(x0,x1))}letpcty_signaturex0={pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_signaturex0)}letpcty_arrowx0=funx1->funx2->{pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_arrow(x0,x1,x2))}letpcty_extensionx0={pcty_attributes=[];pcty_loc=loc;pcty_desc=(Pcty_extensionx0)}letpcty_openx0=funx1->{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=fun~vars->fun~args->fun~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_arrowx0=funx1->funx2->{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_constrx0=funx1->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_constr(x0,x1))}letptyp_objectx0=funx1->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_object(x0,x1))}letptyp_classx0=funx1->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_class(x0,x1))}letptyp_aliasx0=funx1->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_alias(x0,x1))}letptyp_variantx0=funx1->funx2->{ptyp_loc_stack=[];ptyp_attributes=[];ptyp_loc=loc;ptyp_desc=(Ptyp_variant(x0,x1,x2))}letptyp_polyx0=funx1->{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_openx0=funx1->{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_intx0=funx1->{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_letx0=funx1->funx2->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_let(x0,x1,x2))}letpexp_functionx0=funx1->funx2->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_function(x0,x1,x2))}letpexp_applyx0=funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_apply(x0,x1))}letpexp_matchx0=funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_match(x0,x1))}letpexp_tryx0=funx1->{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_constructx0=funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_construct(x0,x1))}letpexp_variantx0=funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_variant(x0,x1))}letpexp_recordx0=funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_record(x0,x1))}letpexp_fieldx0=funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_field(x0,x1))}letpexp_setfieldx0=funx1->funx2->{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_ifthenelsex0=funx1->funx2->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_ifthenelse(x0,x1,x2))}letpexp_sequencex0=funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_sequence(x0,x1))}letpexp_whilex0=funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_while(x0,x1))}letpexp_forx0=funx1->funx2->funx3->funx4->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_for(x0,x1,x2,x3,x4))}letpexp_constraintx0=funx1->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_constraint(x0,x1))}letpexp_coercex0=funx1->funx2->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_coerce(x0,x1,x2))}letpexp_sendx0=funx1->{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_setinstvarx0=funx1->{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_letmodulex0=funx1->funx2->{pexp_loc_stack=[];pexp_attributes=[];pexp_loc=loc;pexp_desc=(Pexp_letmodule(x0,x1,x2))}letpexp_letexceptionx0=funx1->{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_polyx0=funx1->{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_newtypex0=funx1->{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_openx0=funx1->{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=fun~kind->{pext_name=name;pext_kind=kind;pext_loc=loc;pext_attributes=[]}letpparam_valx0=funx1->funx2->{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=fun~mutable_->fun~type_->{pld_name=name;pld_mutable=mutable_;pld_type=type_;pld_loc=loc;pld_attributes=[]}letletop~let_=fun~ands->fun~body->{let_;ands;body}letlocation~start=fun~end_->fun~ghost->{loc_start=start;loc_end=end_;loc_ghost=ghost}letmodule_binding~name=fun~expr->{pmb_name=name;pmb_expr=expr;pmb_attributes=[];pmb_loc=loc}letmodule_declaration~name=fun~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_functorx0=funx1->{pmod_attributes=[];pmod_loc=loc;pmod_desc=(Pmod_functor(x0,x1))}letpmod_applyx0=funx1->{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_constraintx0=funx1->{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=fun~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_functorx0=funx1->{pmty_attributes=[];pmty_loc=loc;pmty_desc=(Pmty_functor(x0,x1))}letpmty_withx0=funx1->{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=fun~type_->{pmtd_name=name;pmtd_type=type_;pmtd_attributes=[];pmtd_loc=loc}letotagx0=funx1->{pof_attributes=[];pof_loc=loc;pof_desc=(Otag(x0,x1))}letoinheritx0={pof_attributes=[];pof_loc=loc;pof_desc=(Oinheritx0)}letopen_infos~expr=fun~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_aliasx0=funx1->{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_intervalx0=funx1->{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_constructx0=funx1->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_construct(x0,x1))}letppat_variantx0=funx1->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_variant(x0,x1))}letppat_recordx0=funx1->{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_orx0=funx1->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_or(x0,x1))}letppat_constraintx0=funx1->{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_openx0=funx1->{ppat_loc_stack=[];ppat_attributes=[];ppat_loc=loc;ppat_desc=(Ppat_open(x0,x1))}letposition~fname=fun~lnum->fun~bol->fun~cnum->{pos_fname=fname;pos_lnum=lnum;pos_bol=bol;pos_cnum=cnum}letrtagx0=funx1->funx2->{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_typex0=funx1->{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_extensionx0=funx1->{psig_loc=loc;psig_desc=(Psig_extension(x0,x1))}letpstr_evalx0=funx1->{pstr_loc=loc;pstr_desc=(Pstr_eval(x0,x1))}letpstr_valuex0=funx1->{pstr_loc=loc;pstr_desc=(Pstr_value(x0,x1))}letpstr_primitivex0={pstr_loc=loc;pstr_desc=(Pstr_primitivex0)}letpstr_typex0=funx1->{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_extensionx0=funx1->{pstr_loc=loc;pstr_desc=(Pstr_extension(x0,x1))}lettoplevel_directive~name=fun~arg->{pdir_name=name;pdir_arg=arg;pdir_loc=loc}lettype_declaration~name=fun~params->fun~cstrs->fun~kind->fun~private_->fun~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=fun~params->fun~constructors->fun~private_->{ptyext_path=path;ptyext_params=params;ptyext_constructors=constructors;ptyext_private=private_;ptyext_loc=loc;ptyext_attributes=[]}letvalue_binding~pat=fun~expr->fun~constraint_->{pvb_pat=pat;pvb_expr=expr;pvb_constraint=constraint_;pvb_attributes=[];pvb_loc=loc}letvalue_description~name=fun~type_->fun~prim->{pval_name=name;pval_type=type_;pval_prim=prim;pval_attributes=[];pval_loc=loc}end