Caml1999I0371#"%Subst%subst;!k@@@A@A@A@B@@@0typing/subst.mligg@@@@A@A@$safe;@@@AР$Safe@@@@AA@@@B@@@@ii'@@A@&B@A@&unsafe;@@@AР&Unsafe@@@@CA@@@D@@@@'j(((j(?@@A@9C@A@!t;@@@A@2@@@E@@@F@@@@;lAAx<@@k@@)signature$@E@@@+@@,@E@@@-@@.@L)signature@@@/@@0a^U)signature@@@2]@@@1@@@3@@4@@5@@6@yy@@$l@@'compose%@l@@@7@@8@s@@@9@@:z@@@<@@@;@@@=@@>@@?@5{6{@@Gm@@@@9`}}:@Kn@@@Ӡ$Lazy@+module_decl&;@@(mdl_type3@@'modtype'@@@MST @@eu@.mdl_attributes@@)Parsetree*attributes@@@Lc d 6@@ux@'mdl_loc@@8!t@@@Kq7=r7Q@@y@'mdl_uid@@#Uid!t@@@JRXRg@@{@@@A@@@@@hm@@@@o@A@:;@@*MtyL_ident!t@@@R@@@@|@.MtyL_signature)signature)@@@Q@@@@}@,MtyL_functor1functor_parameter+@@@Pl@@@O@@@@~@*MtyL_aliasH!t@@@N@@@@@@@A@@@@@oq@@@@p@B@3modtype_declaration(;@@)mtdl_type@@&optionL@@@V@@@W,2,L@@@@/mtdl_attributes@@*attributes@@@Ucic@@A@(mtdl_loc@@!t@@@T@@B@(mtdl_uid@@Y#Uid!t@@@S@@$C@@@A@@@@@  @@@@(q@B@w;@@@A@@@@@@@@@0r@B@.signature_item*;@@*SigL_value!t@@@r1value_description@@@q*visibility@@@p@@@A.@@RD@)SigL_type!t@@@o0type_declaration@@@n*rec_status@@@m*visibility@@@l@@b/3c/v@@tE@+SigL_typext!t@@@k5extension_constructor@@@j*ext_status@@@i*visibility@@@h@@w{w@@F@+SigL_module!t@@@g/module_presence@@@fY@@@e*rec_status@@@d*visibility@@@c@@$@@G@,SigL_modtypeC!t@@@b@@@a*visibility@@@`@@%)%e@@H@*SigL_class^!t@@@_$1class_declaration@@@^**rec_status@@@]0*visibility@@@\@@fjf@@I@/SigL_class_type!t@@@[F6class_type_declaration@@@ZL*rec_status@@@YR*visibility@@@X@@  @@J@@@A@@@@@@@@@s@B@^;@@$Unit@@:>:D@@,K@%NamedG!t@@@t@@@u@@@s@@3EI4El@@EL@@@A@@@@@7 "@@@@Ht@B@.of_module_decl,@2module_declaration@@@v@@w@@@x@@y@LoqMo@@^N@@*of_modtype-@+module_type@@@z@@{@@@|@@}@bc@@tO@@/of_modtype_decl.@3modtype_declaration@@@~@@@@@@@@xy&@@P@@,of_signature/@)signature@@@@@@@@@@@')'X@@Q@@2of_signature_items0@y~@@@@@@@@@@@@@@Y[Y@@R@@1of_signature_item1@.signature_item@@@@@@@@@@@@@S@@+module_decl2@@@@@@@x@@@@@@=@@@@@@@@@@@@@@@@@@T@@'modtype3@?@@@@@@@@@@@@@@@@@@@@@@@@@@@H@@U@@,modtype_decl4@`@@@@@@@@@@@@^@@@@@a@@@@@@@@@@ IK!I@@2V@@)signature5@@@@@@@@@@@@@@@@@@@@@@@@@@@@AB@@SW@@.signature_item6@@@@@@@@@@@@@@@@@@@@@@@@@@@@bc@@tX@@1force_module_decl7@@@@@@2module_declaration@@@@@@xy\@@Y@@-force_modtype8@8@@@@@+module_type@@@@@@]_]@@Z@@2force_modtype_decl9@@@@@@3modtype_declaration@@@@@@@@[@@/force_signature:@@@@@@)signature@@@@@@@@\@@4force_signature_once;@%@@@@@/@@@@@@@@@N@@]@@4force_signature_item<@@@@@@@/.signature_item@@@@@@OQO@@^@@@@@_@@@@8Π%Subst0=aqT/!p+(Warnings0Ef{&)Unit_info0'T Χ@aR%Types0"|Vȷ`X .Type_immediacy00$ jbv\"k&-Stdlib__Uchar0=H^V9>ɠ+Stdlib__Sys0b'8=OIn+Stdlib__Set0ܔ@Z8XWaa2+Stdlib__Seq0?72#[O+Stdlib__Map0*4ɇ2.Stdlib__Domain0'Ϳo\0m.K.Stdlib__Buffer0,I[?z&Stdlib0t0VoS%{<F:%Shape0 M``ll)Primitive0dU=\I/}$Path0k.tbGmᠠ)Parsetree0v o[pY Y+Outcometree0BuG^)= 9c )Longident0wP q;ɡ(Location0nBɊOn?7~ؠ,Identifiable0]/*N %Ident0>ЃzV)j⠠*Format_doc0uy@GmWUࠠ0CamlinternalLazy0zY# #4#-8CamlinternalFormatBasics0|.e1R$|o(Asttypes0eT$BbRM dc@@@Caml1999T037}xC%Subst*ocaml.text&_none_@@A/ Substitutions 0typing/subst.mliP77P7K@@@@@@3@@@@@@#intA;@@#intA@@@@@;@A@$charB;@@$charA@@@@@A@A@&stringQ;@@&stringA@@@@@G@@@%bytesC;@@%bytesA@@@@@M@@@%floatD;@@%floatA@@@@@S@@@$boolE;@@%falsec@@]@$trued@@c@@@A@@@@@d@A@$unitF;@@"()e@@n@@@A@@@@@o@A@ #exnG;@@@A@@@@@s@@@#effH;@@O@A@A@@@@@@|@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@@@@%arrayJ;@@R@A%arrayA@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@)nativeintA@@@@@@@@%int32N;@@%int32A@@@@@@@@%int64O;@@%int64A@@@@@@@@&lazy_tP;@@X@A&lazy_tA@Y@@@@@@@@ 5extension_constructorR;@@5extension_constructorA@@@@@@@@*floatarrayS;@@*floatarrayA@@@@@@@@&iarrayT;@@Y@A&iarrayA@Y@@@@@@@@ *atomic_locU;@@Z@A*atomic_locA@@@@@@ @@@ .Assert_failure`#@@@@@J@@@@@@@@[@@A!=ocaml.warn_on_literal_pattern%@&@0Division_by_zero]#@@@A+ . .@+End_of_file\#$@@@A366@'FailureY#,@'@@A<??@0Invalid_argumentX#5@0@@AE$H#H@-Match_failureV#>@@=@9@;@@a@@AV5Y4Y@)Not_foundZ#O@@@A^=a<a@-Out_of_memoryW#W@@@AfEiDi@.Stack_overflow^#_@@@AnMqLq@.Sys_blocked_io_#g@@@AvUyTy@)Sys_error[#o@j@@A^]@:Undefined_recursive_modulea#x@@w@s@u@@h@@Aon@:Continuation_already_takenb#@@@Awv@&Stdlib@Aࠐ%Types%TypesRMRRMW@@A3@ @ARMM@@@ } Substitutions are used to translate a type from one context to another. This requires substituting paths for identifiers, and possibly also lowering the level of non-generic variables so that they are inferior to the maximum level of the new context. Substitutions can also be used to create a "clean" copy of a type. Indeed, non-variable node of a type are duplicated, with their levels set to generic level. That way, the resulting type is well-formed (decreasing levels), even if the original one was not. In the presence of local substitutions for module types, a substitution for a type expression may fail to produce a well-formed type. In order to confine this issue to local substitutions, the type of substitutions is split into a safe and unsafe variant. Only unsafe substitutions may expand a module type path into a generic module type. UZZd@@@@@@A+%substAg g@А!k@ c3@*;@@ b@A@A@G@B@@@g@)ocaml.doc吠 Type familly for substitutions ff@@@@@@@@@A@@Ag g @@@A@;%@A@A@A@B@@@@@ @@A@@@@@@@@Y':@A+$safeBii@@;@@AР$Safe@@@@ hA@@@ i@@@@ii'@@A@)B@@@Aзi!i&@A@@@@@@3@f8";@@@A*@@@ p@ f@@@@@@@@A+i @@@@3)(()))))@ @A@A+&unsafeC7j(-8j(3@@;@@OAР&Unsafe@@@@ sA@@@ t@@@@Dj((Ej(?@@A@]C@@@AзOj(7Pj(>@A@@@@@@3ONNOOOOO@5VP";@@@A*@@@ {@ q@@@@@@@@A_j(6@@@@3]\\]]]]]@ @A@A+!tDklAFllAG@@;@@Aw@@@ }@@@ @@@@ylAAzlAT@6 Standard substitutionmUUmUp@@@@@@@@@D@@@Aг%substlAO@г $safelAJlAN@@(3@Jke7;@@@A?@@@ @ |@@@@/,@@@A@@@9 /@@1/.@..@@@.@.@@3@@A=<@(identityorvor~@г%substoror@А!a@ E@ 3@7mg@Aoror@@@ @@@  @@@orr@@E@@@@&unsafepp@б@г!tpp@@ @@@ 3@(A@A@@гD%substpp@г֠&unsafe pp@@ @@@ @@@@@@  @@@&@@  @@ #)@@@p@@7F@@@@)(add_type*r+r@б@г%Ident!t%Ident;r3BAABBBBB@Mb*@A @@б@г$Path!t$PathWrXr@ [r\r@@@@@@ @@б@г%substkrlr@А!k@E@1wrxr@@@ @@@8@@гƠ%substrr@А!kFrr@@@ @@@M @@@@@ @@R!@@@>@@ @@WF@@@_@@ @@\g@@@r@@G@@!@@b*add_moduless@б@г!t%Identss@ ss@@@@@@ 3@(@A @@б@г!t$Pathss@ s s @@@@@@  @@б@г-%substs s @А!k@E@ /s s @@@ @@@ 6@@гG%substs s @А!kD s s @@@ @@@K @@@@@ @@P!@@@>@@ @@UF@@@]@@ @@Ze@@@%s@@=H@@!@@`+add_modtype 0t  1t  )@б@г!t%Ident?t  +@t  0@ Ct  1Dt  2@@@@@@3FEEFFFFF@(@A @@б@г!t$PathYt  6Zt  :@ ]t  ;^t  <@@@@@@ @@б@г%substmt  Cnt  H@А!k@&E@/yt  @zt  B@@@ @@@6@@гȠ%substt  Ot  T@А!kDt  Lt  N@@@ @@@K @@@@@ @@ P!@@@>@@! @@"UF@@@]@@# @@$Ze@@@t  @@I@@!@@`*for_savingàv V Zv V d@б@гQ!tv V fv V g@@ @@@'3@y@A@@г`!tv V kv V l@@ @@@(@@@@@)@@* @@@v V V @@J@@@@0reset_for_savingĠw m qw m @б@г$unitw m w m @@ @@@+3@3H@A@@г$unitw m w m @@ @@@,@@@@@-@@. @@@ w m m @@"K@@@@+change_locs x  x  @б@гa%subst x  !x  @А!k@E@/3(''(((((@9N%@A.x  /x  @@@ @@@1 @@б@г(Location!t(LocationDx  Ex  @ Hx  Ix  @@@@@@# @@г%substVx  Wx  @А!k61]x  ^x  @@@<@@@8 @@@@@ @@=%@@@=@@ @@B@@@@px  @@L@@@@H+module_path {z  |z  @б@г!tz  z  @@ @@@3@a|@A@@б@гF!t$Pathz  z  @ z  z  @@@@@@ @@г\!t$Pathz  z  @ z  z  @@@@@@0 @@@@@@@5& @@@=@@ @@:@@@@z  @@M@@@@@)type_path {  {  @б@гs!t{  {  @@ @@@3@Yn@A@@б@г!t$Path{  {  @ {  {  @@@@@@ @@г!t$Path {   {  @  {  {  @@@@@@0 @@@@@@@5& @@@=@@ @@:@@@@ {  @@8N@@@@@,modtype_path +|  ,|  !@б@гˠ!t6|  #7|  $@@ @@@387788888@Yn@A@@б@г!t$PathK|  (L|  ,@ O|  -P|  .@@@@@@ @@г !t$Patha|  2b|  6@ e|  7f|  8@@@@@@0 @@@@@@@5& @@@=@@ @@:@@@@x|  @@O@@@@@)type_expr~ : >~ : G@б@г#!t~ : I~ : J@@ @@@3@Yn@A@@б@г)type_expr~ : N~ : W@@ @@@@@г)type_expr~ : [~ : d@@ @@@@@@@@@@# @@@+@@ @@(.@@@~ : :@@P@@@@.*class_type e i e s@б@гi!t e u e v@@ @@@3@G\@A@@б@гJ*class_type e z e @@ @@@@@гW*class_type e  e @@ @@@@@@@@@@# @@@+@@ @@(.@@@ e e@@Q@@@@.1value_description@  @  @б@г!t@  @  @@ @@@3@G\@A@@б@г1value_description+@  ,@  @@ @@@@@г1value_description8@  9@  @@ @@@@@@@@@@# @@@+@@ @@(.@@@J@  @@bR@@@@.0type_declarationUA  VA  @б@г!t`A  aA  @@ @@@3baabbbbb@G\@A@@б@г0type_declarationqA  rA  @@ @@@@@г0type_declaration~A  A  @@ @@@@@@@@@@# @@@+@@ @@(.@@@A  @@S@@@@.5extension_constructorB  B  /@б@г;!tC 1 9C 1 :@@ @@@3@G\@A@@б@г5extension_constructorC 1 >C 1 S@@ @@@@@г)5extension_constructorC 1 WC 1 l@@ @@@@@@@@@@# @@@+@@ @@(.@@@B  @@T@@@@.1class_declarationD m qD m @б@г!tD m D m @@ @@@3@G\@A@@б@гb1class_declarationD m D m @@ @@@@@гo1class_declaration D m  D m @@ @@@@@@@@@@# @@@+@@ @@(.@@@D m m@@4U@@@@.2cltype_declaration'E  (E  @б@гǠ!t2E  3E  @@ @@@343344444@G\@A@@б@г6class_type_declarationCE  DE  @@ @@@@@г6class_type_declarationPE  QE  @@ @@@@@@@@@@# @@@+@@ @@(.@@@bE  @@zV@@@@.xw l When applied to a signature item, a substitution not only modifies the types present in its declaration, but also refreshes the identifier of the item. Effectively this creates new declarations, and so one should decide what the scope of this new declaration should be. This is decided by the [scoping] argument passed to the following functions. tG  uN n p@@@@@@3srrsssss@@U@AA+'scopingEP r wP r ~@@;@@$Keep@@Q  Q  @@X@*Make_local@@R  R  @@Y@'Rescopew@@@@@S  S  @@Z@@@A@@@@@P r r@@@@W@@#$$Q  "@!@@@%@#!!R  @@@@"@#S  S  @@г #intS  !@@'3@OI;@@@A@@@@@#@@@!@A&@@@@(@@A@$@@S$'@'modtypeU  U  @б@г\'scopingU  U  @@ @@@3@mga@A@@б@г!tU  U  @@ @@@@@б@гb+module_typeU  U  @@ @@@ @@гo+module_type U   U  @@ @@@-@@@@@@@2 @@@)@@ @@7,@@@?@@ @@<B@@@ !U  @@ 9[@@@@B)signature ,V   -V  @б@г'scoping 7V   8V  @@ @@@3 9 8 8 9 9 9 9 9@[p@A@@б@гݠ!t HV   IV @@ @@@@@б@г)signature WV  XV  @@ @@@ @@г)signature dV  eV @@ @@@-@@@@@@@2 @@@)@@ @@7,@@@?@@ @@<B@@@ {V  @@ \@@@@B.signature_item W W-@б@г'scoping W/ W6@@ @@@3        @[p@A@@б@г7!t W: W;@@ @@@@@б@г.signature_item W? WM@@ @@@ @@г#.signature_item WQ W_@@ @@@-@@@@@@@2 @@@)@@ @@7,@@@?@@ @@<B@@@ W@@ ]@@@@B3modtype_declaration X`d X`w@б@гj'scoping Yy{ Yy@@ @@@3        @[p@A@@б@г!t Yy Yy@@ @@@ @@б@гp3modtype_declaration Yy Yy@@ @@@  @@г}3modtype_declaration Yy Yy@@ @@@ -@@@@@ @@ 2 @@@)@@ @@7,@@@?@@ @@<B@@@ /X``@@ G^@@@@B2module_declaration :Z ;Z@б@гĠ'scoping EZ FZ@@ @@@3 G F F G G G G G@[p@A@@б@г렐!t VZ WZ@@ @@@@@б@г2module_declaration eZ fZ@@ @@@ @@г2module_declaration rZ sZ@@ @@@-@@@@@@@2 @@@)@@ @@7,@@@?@@ @@<B@@@ Z@@ _@@@@B'compose ^cg ^cn@б@г4!t ^cp ^cq@@ @@@3        @[p@A@@б@гE!t ^cu ^cv@@ @@@@@гR!t ^cz ^c{@@ @@@@@@@@@@ # @@@+@@! @@"(.@@@ ^cc@ U Composition of substitutions: apply (compose s1 s2) x = apply s2 (apply s1 x) * \ ]*b@@@@@@@ `@@"@  𐠠@@@@@@G&Unsafe,F `} `}@ n@@БA+!tG b b@@;@@ A P@@@$@@@&@@@@ b b@ @ Unsafe substitutions introduced by [with] constraints, local substitutions ([type t := int * int]) or recursive module check.  c !d5@@@@@@@@@ 9a@@@Aг%subst *b@г &unsafe 2b 3b@@(3 1 0 0 1 1 1 1 1@j7;@@@A?@@@3@#@@@@/,@@@A@@@9 /@@1 n R/.@..@@@.@.@@3 J I I J J J J J@@A=<@+add_modtype  Wh Xh@б@г-!t%Ident fh gh@  jh kh@@@@@@73 m l l m m m m m@<rl@A @@б@г +module_type |h }h@@ @@@8@@б@г ̠%subst h h@А#any@DH@9& h h@@@ @@@;-@@г!t h h@@ @@@<:@@@@@=@@>? @@@6@@? @@@D9@@@L@@A @@BIT@@@ h@ 鐠 Replacing a module type name S by a non-path signature is unsafe as the packed module type [(module S)] becomes ill-formed.  f77 g@@@@@@@ b@@'@  ݐ@@@@@@h0add_modtype_path! i i@б@г!t$Path i i@  i i@@@@@@E3        @A@A @@б@г j+module_type i i(@@ @@@F@@б@г U%subst i1 i6@А#any@RH@G& i, !i0@@@ @@@I-@@г*!t .i: /i;@@ @@@J:@@@@@K@@L? @@@6@@M @@ND9@@@L@@O @@PIT@@@ Ei@@ ]c@@@@O-add_type_path" Pm Qm@б@г !t$Path _m `m@  cm dm@@@@@@S3 f e e f f f f f@q(@A @@б@г $!t$Path ym zm@  }m ~m@@@@@@T @@б@г!t m m@@ @@@U)@@г!t m m@@ @@@V6@@@@@W@@X; @@@)@@Y @@Z@1@@@H@@[ @@\EP@@@ m@ ސ Deep editing inside a module type require to retypecheck the module, for applicative functors in path and module aliases.  k=? l@@@@@@@ d@@'@  Ґ@@@@@@d1add_type_function# n n @б@г !t$Path o o@  o o@@@@@@]3        @A@A @@б¶msг m$list o. o2@г k)type_expr o$ o-@@ @@@^@@@@@@`" @@б$bodyг )type_expr o; oD@@ @@@a3@@б@г'!t +oH ,oI@@ @@@bB@@г4!t 8oM 9oN@@ @@@cO@@@@@d@@eT @@2)@@f @@gY Ho6@@XA@@h @@i_ No@@@h@@j @@kep@@@ Vn@@ ne@@ @@k/add_module_path$ apOU bpOd@б@г !t$Path ppOf qpOj@  tpOk upOl@@@@@@l3 w v v w w w w w@(@A @@б@г 5!t$Path pOp pOt@  pOu pOv@@@@@@m @@б@г!t pOz pO{@@ @@@n)@@г!t pO pO@@ @@@o6@@@@@p@@q; @@@)@@r @@s@1@@@H@@t @@uEP@@@ pOQ@@ f@@@@KA+%error%H r r@@;@@9Fcm_type_substituted_away& !t@@@v K+module_type@@@w@@ s s@@ h@@@A@@@@@ r@@@@g@@# s s@ @г$Path s s@$ss@@@,3@G=;@@@A@@@@@ @@@@A @@г,%Typesss@3s1@2@@:3@@@@5@@A@1@@3@@A25@+#res'I%u&u@А!a@3,++,,,,,@+ga@A2u3u@@BA@; @A LA &resultJ@y@@@@@@Y@@@@@HuIu@@@@ai@@@AгQu @А!a'WuXu@@г%error`uau@@"3@@@+4du@@@@6@0type_declaration(nwow @б@гu!tywzw@@ @@@3{zz{{{{{@P_K@A@@б@г 0type_declarationww#@@ @@@@@гr#resw8w;@г 0type_declarationw'w7@@ @@@(@@@@@@- @@@$@@ @@2'@@@:@@ @@7=@@@w!@@j@@#@@=.signature_item)x<Bx<P@б@гM'scopingx<Rx<Y@@ @@@3@Vk@A@@б@г۠!tx<]x<^@@ @@@@@б@г S.signature_itemx<bx<p@@ @@@ @@г֠#resx<x<@г j.signature_itemx<tx<@@ @@@7@@@@@@< @@@$@@ @@A'@@@8@@ @@F;@@@N@@ @@KQ#@@@!x<>&@@9k@@(@@Q)signature*,y-y@б@г'scoping7y8y@@ @@@398899999@j@A@@б@гD!tHyIy@@ @@@@@б@г )signatureWyXy@@ @@@ @@г?#resdyey@г )signaturenyoy@@ @@@7@@@@@@< @@@$@@ @@A'@@@8@@ @@F;@@@N@@ @@KQ#@@@y&@@l@@(@@Q'compose+{{@б@г!t{{@@ @@@3@j@A@@б@г!t{{@@ @@@@@г#res{{@гĠ!t{{@@ @@@(@@@@@@- @@@$@@ @@2'@@@:@@ @@7=@@@{!@ Composition of substitutions is eager and fails when the two substitution are incompatible, for example [ module type t := sig end] is not compatible with [module type s := sig type t=(module t) end]|~z@@@@@@@m@@1@@@@@@@V@;@@@A@@@@@@@@@@@@A@@@@@@@@@@@@@@@@@@@@@@@@@@@@@jhZ@K@HG@@@@@@6@@@@@@/%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@zzs@@@@@@@@ff@@@@@@_@@@@@U@@@@@@@@@@@@4@2@.@+*@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@;@@ؐ@@@@@@@@@@@A@@@@@@@@A@O@L@@@@@@1B@@@@@:4@@@@@@@@@@@@@@@ @@@@@@@@@ @@@@@@X@@@@@ a@@@ @@@ @@@ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)@@(@@@@'@@&z@@@#@@@%@@@$@"@@!@@ @ecU@@3@??@@@@@@h@AK3CBBCCCCC@@AH`}I@@@K`}}@@$LazyJWX@p_@@БA++module_decl-Kfg@@;@@(mdl_type3@@'modtype.K@@@*uv @@u@.mdl_attributes@@)Parsetree*attributes@@@  6@@x@'mdl_loc@@ U!t@@@7=7Q@@y@'mdl_uid@@#Uid!t@@@%RXRg@@{@@@A@@@@@hm@@@@o@@#@@9@8@@Ш@гC'modtype @@K3@@A@t@@@k@rD@)A@i@@@H@@@w;@@@A@@@@@6@@@3j;@@@A@@@@@oq@@@@p@3modtype_declaration/K;@@@A@@@@@  @@@@q@)signature0K;@@@A@@@@@@@@@r@.signature_item1K;@@@A@@@@@@@@@s@1functor_parameter2K;@@@A@@@@@ "El@@@@t@@AKJ@@@@+K@@# @@@Ш@г)Parsetree ! *@ + 5@@@a@@@@d@@#!7D@@@Ш@г(Location,7F-7N@07O17P@@@z@@@@}@@#:R_@@@Ш@гDRaERd@HReIRf@@@@@@@&@@@A@@+ߠ߰RouSo|@@;@@*MtyL_ident!t@@@(@@cd@@||@.MtyL_signature@@@)@@qr@@}@,MtyL_functor@@@*@@@+@@@@~@*MtyL_aliasC!t@@@,@@@@@@@A@@@@@@@@@#AA@8@гC$Path@JH@I@@QJ@@@@L@#HH@A@гJ)signatureK@@QL@@@@N@#JJ@>@гL1functor_parameter@@T@@гQ'modtypeR@@XS@@@@U@#QQ@I@гS$Path@Z@@@a5@@@@\@@A@@+  #@@;@@)mtdl_type@@V@@@-@@@/,2,L@@@@/mtdl_attributes@@*attributes@@@2cic@@,A@(mtdl_loc@@ !t@@@5!"@@:B@(mtdl_uid@@#Uid!t@@@801@@IC@@@A@@@@@N@@@K@#==38,;@2@@Ш@г@&optionA,EB,K@гE'modtypeJ,=K,D@@M@@@R @@U@@0@L@#HHATcx@@@@Ш@гK)Parsetree_cz`c@Rccdc@@@Z@@]@@3@W@#SSLm@K@@Ш@гV(Locationxy@]|}@@@eư@@h@@6@b@#^^V@U@@Ш@гac@f@@@oް@@r@@9@k@@A@@+@@;@@A@@@@@@@@@@A@@+@@;@@*SigL_value!t@@@;!1value_description@@@<'*visibility@@@=@@.@@D@)SigL_type!t@@@>=0type_declaration@@@?C*rec_status@@@@I*visibility@@@A@@/3/v@@E@+SigL_typext!t@@@B_5extension_constructor@@@Ce*ext_status@@@Dk*visibility@@@E@@w{w@@F@+SigL_module!t@@@F/module_presence@@@G@@@H*rec_status@@@I*visibility@@@J@@,-$@@EG@,SigL_modtype!t@@@K^@@@L*visibility@@@M@@G%)H%e@@`H@*SigL_class"!t@@@N1class_declaration@@@O*rec_status@@@P*visibility@@@Q@@ifjjf@@I@/SigL_class_typeD!t@@@R6class_type_declaration@@@S*rec_status@@@T*visibility@@@U@@@@J@@@A@@@@@@@@@#@@г砡%Ident @  @@@@@г!@@@@г$@@@@@@@#/5/>@@г%Ident/B/G@/H/I@@@@@г/L/\@@@@г/_/i@@&@@г/l@@ .@@@@@#w}w@@г%Identww@ ww@@@F@@гww@@O@@гww@@X@@гw@@`@@@@@#@@г%Ident*+@./@@@#x@@г89@@%@@г!+module_declBC @@)@@г&'K L@@-@@г)*T(@@/)@@@@+@#''Z%+[%7@@г)%Identf%;g%@@0j%Ak%B@@@8@@г33modtype_declarationu%Ev%X@@;@@г89~%[7@@>ư8@@@@:@#66flfv@@г8%Identfzf@?ff@@@Gް@@гBCff@@I@@гEFff@@L@@гHIfG@@NH@@@@J@#FF@,@гH%Ident@O@@@W@@гRS@@Y@@гUV@@\"@@гXY@@^*@@@@Z@@A@@+ & 7@@;@@$Unit@@:>:D@@ K@%NamedV!t@@@V@@@X@@@Y@@ EI@@$L@@@A@@@@@@@@@###:@!@ @@@$@#  EKEP@@г"&option#E\$Eb@г'%Ident.ET/EY@.2EZ3E[@@@6|@@@;} @@г1'modtype>Ee@@@8A@@@@5@@A@C@@3=<<=====@@AC@.of_module_declJouKo@б@г2module_declaration%TypesYoZo@ ]o^o@@@@@@3`__`````@qyu@A @@г +module_declroso@@ @@@@@@@@@@$ @@@oq @@N@@@@*of_modtype@б@г+module_type%Types@ @@@@@@3@A_(@A @@г8'modtype@@ @@@@@@@@@@ @@@ @@O@@@@/of_modtype_decl@б@г53modtype_declaration%Types@ @@@@@@3@<Z(@A @@г3modtype_declaration&@@ @@@@@@@@@@ @@@ @@ P@@@@,of_signature'-'9@б@гp)signature%Types'<'A@ 'B'K@@@@@@3@<Z(@A @@г6)signature#'O$'X@@ @@@@@@@@@@ @@@0') @@HQ@@@@2of_signature_items;Y_<Yq@б@г$listFYGY@г[.signature_itemPYtQY@@ @@@3RQQRRRRR@=[)@A@@@ @@@ @@гw)signaturedYeY@@ @@@@@@@@@@ @@@qY[ @@R@@@@1of_signature_item|}@б@г.signature_item%Types@ @@@@@@3@A`(@A @@г.signature_item@@ @@@@@@@@@@ @@@ @@S@@@@+module_decl@б@гA'scoping@@ @@@3@3Q@A@@б@гh!t@@ @@@@@б@г|+module_decl@@ @@@ @@г+module_decl @@ @@@-@@@@@@@2 @@@)@@ @@7,@@@?@@ @@<B@@@@@T@@@@B'modtype#@б@г'scoping&-@@ @@@3@[p@A@@б@г !t-1.2@@ @@@@@б@гǠ'modtype<6==@@ @@@ @@гԠ'modtypeIAJH@@ @@@-@@@@@@@2 @@@)@@ @@7,@@@?@@ @@<B@@@`@@xU@@@@B,modtype_declkIOlI[@б@г'scopingvI^wIe@@ @@@3xwwxxxxx@[p@A@@б@г!tIiIj@@ @@@@@б@г3modtype_declarationInI@@ @@@ @@г3modtype_declarationII@@ @@@-@@@@@@@2 @@@)@@ @@7,@@@?@@ @@<B@@@IK@@V@@@@B)signature@б@гO'scoping@@ @@@3@[p@A@@б@гv!t@@ @@@@@б@г)signature@@ @@@ @@г)signature@@ @@@-@@@@@@@2 @@@)@@ @@7,@@@?@@ @@<B@@@@@,W@@@@B.signature_item @б@г'scoping*+@@ @@@3,++,,,,,@[p@A@@б@гР!t;<@@ @@@@@б@гU.signature_itemJK@@ @@@ @@гb.signature_itemW X@@ @@@-@@@@@@@2 @@@)@@ @@7,@@@?@@ @@<B@@@n@@X@@@@B1force_module_decly!z2@б@г+module_decl5@@@ @@@3@[p@A@@г2module_declaration%TypesDI@ J\@@@@@@ @@@ @@@@ # @@@@@Y@@@@#-force_modtype]c]p@б@гJ'modtype]s]z@@ @@@ 3@<Q@A@@г3+module_type%Types]~]@ ]]@@@@@@  @@@ @@ @@ # @@@]_@@Z@@@@#2force_modtype_decl@б@г3modtype_declaration@@ @@@3@<Q@A@@гn3modtype_declaration%Types @ @@@@@@ @@@ @@@@# @@@@@7[@@@@#/force_signature*+@б@гH)signature56@@ @@@376677777@<Q@A@@г)signature%TypesHI@ LM@@@@@@ @@@ @@@@# @@@Z@@r\@@@@#4force_signature_onceef+@б@г)signaturep.q7@@ @@@3rqqrrrrr@<Q@A@@г$listJN@г.signature_item;I@@ @@@@@@@@@ @@@&@@ @@#)@@@@@]@@@@)4force_signature_itemOUOi@б@г.signature_itemOlOz@@ @@@3@BW@A@@г%.signature_item%TypesO~O@ OO@@@@@@ @@@ @@@@# @@@OQ@@^@@@@#@ y sA@ lB@B@BB@=B@B@j@c1@*@@@yG@@@@?@8@@V@O@@@l@e3@@3@Rg5@A13@ K@A  @@@@@@X*A@A@A@A@a?@8@}@v@@xO@H@@e@^@@u@n1@*@@e@^!@@A@s"@@r@k@@~@]@ @ W@@ @H@C @@@3NMMNNNNN@  @  A@  B@ zfB@ tB@ nB@ hwB@@@t@m;@4@@k@d@ @c@\ @@@`@Y'@ @@@@u *@A@ H************************************************************************A@@A@L@ H BMMBM@ H OCaml CC@ H DD3@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt E44E4@ H FF@ H Copyright 1996 Institut National de Recherche en Informatique et GG@ H en Automatique. HHg@ H IhhIh@ H All rights reserved. This file is distributed under the terms of JJ@ H the GNU Lesser General Public License version 2.1, with the KKN@ H special exception on linking described in the file LICENSE. LOOLO@ H MM@ H************************************************************************NN5@0* Substitutions ۠ ~* Substitutions are used to translate a type from one context to another. This requires substituting paths for identifiers, and possibly also lowering the level of non-generic variables so that they are inferior to the maximum level of the new context. Substitutions can also be used to create a "clean" copy of a type. Indeed, non-variable node of a type are duplicated, with their levels set to generic level. That way, the resulting type is well-formed (decreasing levels), even if the original one was not. In the presence of local substitutions for module types, a substitution for a type expression may fail to produce a well-formed type. In order to confine this issue to local substitutions, the type of substitutions is split into a safe and unsafe variant. Only unsafe substitutions may expand a module type path into a generic module type. * !* Type familly for substitutions 7* Standard substitution] m* When applied to a signature item, a substitution not only modifies the types present in its declaration, but also refreshes the identifier of the item. Effectively this creates new declarations, and so one should decide what the scope of this new declaration should be. This is decided by the [scoping] argument passed to the following functions. s V* Composition of substitutions: apply (compose s1 s2) x = apply s2 (apply s1 x) * * Unsafe substitutions introduced by [with] constraints, local substitutions ([type t := int * int]) or recursive module check. ͠ * Replacing a module type name S by a non-path signature is unsafe as the packed module type [(module S)] becomes ill-formed. ' * Deep editing inside a module type require to retypecheck the module, for applicative functors in path and module aliases. 5 * Composition of substitutions is eager and fails when the two substitution are incompatible, for example [ module type t := sig end] is not compatible with [module type s := sig type t=(module t) end] 0 Note: abstract ,N,b@@-./boot/ocamlc)-nostdlib"-I&./boot*-use-prims2runtime/primitives"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I&typing"-I%utils"-I'parsing"-I&typing"-I(bytecomp"-I,file_formats"-I&lambda"-I*middle_end"-I2middle_end/closure"-I2middle_end/flambda"-I=middle_end/flambda/base_types"-I'asmcomp"-I&driver"-I(toplevel"-I%tools"-I'runtime"-I1otherlibs/dynlink"-I-otherlibs/str"-I4otherlibs/systhreads"-I.otherlibs/unix"-I8otherlibs/runtime_events"-c67 T/home/teraram/ci/builds/workspace/parallel-build/flambda/false/label/ocaml-manycores >10/.-,+*)('&%$#"! @@0=xU=&3QPPQQQQQ@O@@(Asttypes0eT$BbRM dc8CamlinternalFormatBasics0|.e1R$|o0CamlinternalLazy0zY# #4#-*Format_doc0uy@GmWUࠠ%Ident0>ЃzV)j⠠,Identifiable0]/*N (Location0nBɊOn?7~ؠ)Longident0wP q;ɡ+Outcometree0BuG^)= 9c )Parsetree0v o[pY Y$Path0k.tbGmᠠ)Primitive0dU=\I/}%Shape0 M``ll&Stdlib0t0VoS%{<F:.Stdlib__Buffer0,I[?z.Stdlib__Domain0'Ϳo\0m.K.Stdlib__Either0HD ?|>.Stdlib__Format00FClW/Stdlib__Hashtbl0(L%bԠ,Stdlib__Lazy0$1mlࠠ.Stdlib__Lexing0^m|e+Stdlib__Map0*4ɇ2ɠ0=aqT/!p+.Type_immediacy00$ jbv\"k&F0"|Vȷ`X )Unit_info0'T Χ@aR(Warnings0Ef{&@0=aqT/!p+A[  uf@"dՐRݐ@?@H@ D a @@}@m H}@Òy`@ް@@@  @wf@@@Đ-V\@  y@@&h@ēV@5@@ .M@ R@ A   @@@f/D@_@$@ Y @  0@D/@@  jH@D { fp@ݰ ݓ @C@@ZR|@˰ ; @@@Đ@ ^ #ΐK@@ w@  @  w@4v@ܐ]@R    @e@@G@ްMc@u@@ ΐH@  @ z 4Yn@ < H@@4@@P@@