Caml1999I037n,Stdlib__Lazy!t ;!a@@A@A0CamlinternalLazy!t@@@ҠY@@@@@(lazy.mliRVVRVw@@@@@@A@ )Undefined!##exnG@@@A&_none_@@A@*A@B@%force"@3!a@@@@@@@@֐+%lazy_forceAA @@@)A X X*A X @@EB@@#map#@@!a@@@!b@@@@@@+@@@@@/@@@@@@@@NL  OL  @@jC@@&is_val$@@!a@@@@@@$boolE@@@@@@iWjW@@D@@(from_val%@!a@@@_@@@@@@~\LL\Le@@E@@'map_val&@@!a@@@!b@@@@@@@@@@@@@@@@@@@cjjcj@@F@@(from_fun'@@$unitF@@@@@!a@@@@@@@@@@@yqqyq@@G@@)force_val(@!a@@@@@@@@@@@H@@@N>,Stdlib__Lazy0$1mlࠠ&Stdlib0t0VoS%{<F:0CamlinternalLazy0zY# #4#-8CamlinternalFormatBasics0|.e1R$|o@@@Caml1999T037Cx gC,Stdlib__Lazy*ocaml.text&_none_@@A8 Deferred computations. (lazy.mliP77P7T@@@@@@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@AA+!tARV^RV_@А!a@}3@;@@|@A@A@@@@@@{G@B@@@RVVRVw@)ocaml.doc̐  A value of type ['a Lazy.t] is a deferred computation, called a suspension, that has a result of type ['a]. The special expression syntax [lazy (expr)] makes a suspension of the computation of [expr], without computing [expr] itself yet. "Forcing" the suspension will then compute [expr] and return its result. Matching a suspension with the special pattern syntax [lazy(pattern)] also computes the underlying expression and tries to bind it to [pattern]: {[ let lazy_option_map f x = match x with | lazy (Some x) -> Some (Lazy.force f x) | _ -> None ]} Note: If lazy patterns appear in multiple cases in a pattern-matching, lazy expressions may be forced even outside of the case ultimately selected by the pattern matching. In the example above, the suspension [x] is always computed. Note: [lazy_t] is the built-in type constructor used by the compiler for the [lazy] keyword. You should not use it directly. Always use [Lazy.t] instead. Note: [Lazy.force] is not concurrency-safe. If you use this module with multiple fibers, systhreads or domains, then you will need to add some locks. The module however ensures memory-safety, and hence, concurrently accessing this module will not lead to a crash but the behaviour is unspecified. Note: if the program is compiled with the [-rectypes] option, ill-founded recursive definitions of the form [let rec x = lazy x] or [let rec x = lazy(lazy(...(lazy x)))] are accepted by the type-checker and lead, when forced, to ill-formed values that trigger infinite loops in the garbage collector and other parts of the run-time system. Without the [-rectypes] option, such ill-founded recursive definitions are rejected by the type-checker. Sxxx  @@@@@@@@@@@@ARV[RV]@@BA@;0@A@A0CamlinternalLazy!t@@@=<;@;;@@@;@;@@KJ@)UndefinedB {  {  @#@@@A{  @X Raised when forcing a suspension concurrently from multiple fibers, systhreads or domains, or when the suspension tries to force itself recursively. |    T V@@@@@@@8A@@@@i4@@@@@@@3,++,,,,,@+a@A $@%force:A X a;A X f@б@г!tEA X lFA X m@А!a@C@3MLLMMMMM@"IC@ASA X iTA X k@@@ @@@ @@А!a ^A X q_A X s@@@@@@@@@+%lazy_forceAA @@@lA X XmA X @  [force x] forces the suspension [x] and returns its result. If [x] has already been forced, [Lazy.force x] returns the same value again without recomputing it. If it raised an exception, the same exception is raised again. @raise Undefined (see {!Undefined}). zB  {H  @@@@@@@B@@@@@@@@@:/ {1 Iterators} J  J  @@@@@@3@Lg8@A#mapL  L  @б@б@А!a@C@L  L  @@А!b@C@#L  L  @@@@@ @@*@@б@г4!tL  L  @А!a':L  L  @@@-@@@A @@гI!tL  L  @А!b1OL  L  @@@7@@@V @@@@@ @@[!@@@:@@ @@`L  @@@L  @E [map f x] returns a suspension that, when forced, forces [x] and applies [f] to its value. It is equivalent to [lazy (f (Lazy.force x))]. @since 4.13  M   S@@@@@@@%C@@+@U @@@@@@.- - {1 Reasoning on already-forced suspensions} *U+U@@@@@@3)(()))))@1@A&is_val6W7W@б@г!tAWBW@А!a@C@ MWNW@@@ @@@'@@г$bool[W\W@@ @@@4@@@@@@@9 @@@hW @ n [is_val x] returns [true] if [x] has already been forced and did not raise an exception. @since 4.00 uXvZ8J@@@@@@@D@@@@@@@@@X(from_val\LP\LX@б@А!a@C@3@mh4@A\L[\L]@@г !t\Ld\Le@А!a\La\Lc@@@@@@ @@@#@@ @@@@@\LL@ [from_val v] evaluates [v] first (as any function would) and returns an already-forced suspension of its result. It is the same as [let x = v in lazy x], but uses dynamic tests to optimize suspension creation in some cases. @since 4.00 ]ffaVh@@@@@@@E@@%@ڐ@@@@@@='map_valcjncju@б@б@А!a@C@3@Te6@Acjycj{@@А!b@C@ cjcj@@@@@ @@@@б@гn!t cj cj@А!a)$cjcj@@@/@@@+ @@г!tcjcj@А!b19%cj&cj@@@7@@@@ @@@@@ @@E!@@@:@@ @@J6cjx@@@9cjj@ 0 [map_val f x] applies [f] directly if [x] is already forced, otherwise it behaves as [map f x]. When [x] is already forced, this behavior saves the construction of a suspension, but on the other hand it performs more work eagerly that may not be useful if you never force the function result. If [f] raises an exception, it will be raised immediately when [is_val x], or raised only when forcing the thunk otherwise. If [map_val f x] does not raise an exception, then [is_val (map_val f x)] is equal to [is_val x]. @since 4.13 FdGq@@@@@@@_F@@+@Z@@@@@@jhg {1 Advanced} The following definitions are for advanced uses only; they require familiarity with the lazy compilation scheme to be used appropriately. dtew#o@@@@@@3cbbccccc@|1@A(from_funpyquqyq}@б@б@г!$unit}yq~yq@@ @@@@@А!a@C@%yqyq@@@@@ @@,@@г!tyqyq@А!a:yqyq@@@ @@@A @@@@@ @@Fyq@@@yqq@  [from_fun f] is the same as [lazy (f ())] but slightly more efficient. It should only be used if the function [f] is already defined. In particular it is always less efficient to write [from_fun (fun () -> expr)] than [lazy expr]. @since 4.00 z@@@@@@@G@@&@ѐ@@@@@@f)force_val@б@гD!t@А!a@ C@3@>@A@@@ @@@ @@А!a @@@@@@@@@@ @G  [force_val x] forces the suspension [x] and returns its result. If [x] has already been forced, [force_val x] returns the same value again without recomputing it. If the computation of [x] raises an exception, it is unspecified whether [force_val x] raises the same exception or {!Undefined}. @raise Undefined if the forcing of [x] tries to force [x] itself recursively. @raise Undefined (see {!Undefined}). xz@@@@@@@'H@@@W"@@@@@@3@OA@B@@(@@r@R@@_0@@3,++,,,,,@Fa2@A@ H************************************************************************5A@@6A@L@ H ;BMM Some (Lazy.force f x) | _ -> None ]} Note: If lazy patterns appear in multiple cases in a pattern-matching, lazy expressions may be forced even outside of the case ultimately selected by the pattern matching. In the example above, the suspension [x] is always computed. Note: [lazy_t] is the built-in type constructor used by the compiler for the [lazy] keyword. You should not use it directly. Always use [Lazy.t] instead. Note: [Lazy.force] is not concurrency-safe. If you use this module with multiple fibers, systhreads or domains, then you will need to add some locks. The module however ensures memory-safety, and hence, concurrently accessing this module will not lead to a crash but the behaviour is unspecified. Note: if the program is compiled with the [-rectypes] option, ill-founded recursive definitions of the form [let rec x = lazy x] or [let rec x = lazy(lazy(...(lazy x)))] are accepted by the type-checker and lead, when forced, to ill-formed values that trigger infinite loops in the garbage collector and other parts of the run-time system. Without the [-rectypes] option, such ill-founded recursive definitions are rejected by the type-checker. à * Raised when forcing a suspension concurrently from multiple fibers, systhreads or domains, or when the suspension tries to force itself recursively. p * [force x] forces the suspension [x] and returns its result. If [x] has already been forced, [Lazy.force x] returns the same value again without recomputing it. If it raised an exception, the same exception is raised again. @raise Undefined (see {!Undefined}). 0* {1 Iterators}  * [map f x] returns a suspension that, when forced, forces [x] and applies [f] to its value. It is equivalent to [lazy (f (Lazy.force x))]. @since 4.13  .* {1 Reasoning on already-forced suspensions} q o* [is_val x] returns [true] if [x] has already been forced and did not raise an exception. @since 4.00 ) * [from_val v] evaluates [v] first (as any function would) and returns an already-forced suspension of its result. It is the same as [let x = v in lazy x], but uses dynamic tests to optimize suspension creation in some cases. @since 4.00 ۠ 1* [map_val f x] applies [f] directly if [x] is already forced, otherwise it behaves as [map f x]. When [x] is already forced, this behavior saves the construction of a suspension, but on the other hand it performs more work eagerly that may not be useful if you never force the function result. If [f] raises an exception, it will be raised immediately when [is_val x], or raised only when forcing the thunk otherwise. If [map_val f x] does not raise an exception, then [is_val (map_val f x)] is equal to [is_val x]. @since 4.13 ^ * {1 Advanced} The following definitions are for advanced uses only; they require familiarity with the lazy compilation scheme to be used appropriately. C * [from_fun f] is the same as [lazy (f ())] but slightly more efficient. It should only be used if the function [f] is already defined. In particular it is always less efficient to write [from_fun (fun () -> expr)] than [lazy expr]. @since 4.00  * [force_val x] forces the suspension [x] and returns its result. If [x] has already been forced, [force_val x] returns the same value again without recomputing it. If the computation of [x] raises an exception, it is unspecified whether [force_val x] raises the same exception or {!Undefined}. @raise Undefined if the forcing of [x] tries to force [x] itself recursively. @raise Undefined (see {!Undefined}). @?)../ocamlc0-strict-sequence(-absname"-w5+a-4-9-41-42-44-45-48"-g+-warn-error"+A*-bin-annot)-nostdlib*-principal"-o0stdlib__Lazy.cmi"-c Z/home/teraram/ci/builds/workspace/parallel-build/flambda/true/label/ocaml-manycores/stdlib @@0{Nтc<