Caml1999I0378(,Stdlib__Lazy!t ;!a@@A@A0CamlinternalLazy!t@@@ޠY@@@@@(lazy.mliRVVRVw@@@@@@A@ )Undefined!##exnG@@@A&_none_@@A@*A@B@%force"@1!a@@@@@@+%lazy_forceAA @@@'A X X(A X @@CB@@#map#@@!a@!b@@@@% @@@) @@@@@@@@FL  GL  @@bC@@&is_val$@8!a@@@@$boolE@@@@@@_W`W@@{D@@(from_val%@!a@U@@@@@@r\LLs\Le@@E@@'map_val&@@!a@!b@@@@p @@@t @@@@@@@@cjjcj@@F@@(from_fun'@@$unitF@@@!a@@@@@@@@@yqqyq@@G@@)force_val(@!a@@@@@@@@@H@@@N>,Stdlib__Lazy0* -S$.)"0D&Stdlib0Lku]8_٠0CamlinternalLazy0&͂7 Pˆ8CamlinternalFormatBasics0%FU(Q/Tu@@@Caml1999T037B >C,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 @@@jA X XkA 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}). xB  yH  @@@@@@@B@@@@@@@@@8/ {1 Iterators} J  J  @@@@@@3@Je8@A#mapL  L  @б@б@А!a@C@L  L  @@А!b@C@#L  L  @@@ @@(@@б@г0!tL  L  @А!a%8L  L  @@@+@@@? @@гE!tL  L  @А!b/ML  L  @@@5@@@T @@@@@W@@@4@@ZL  @@@L  @= [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@@'@M@@@@@@z&% - {1 Reasoning on already-forced suspensions} "U#U@@@@@@3!  !!!!!@1@A&is_val.W/W@б@г!t9W:W@А!a@C@ EWFW@@@ @@@'@@г$boolSWTW@@ @@@4@@@@@7@@@^W @ n [is_val x] returns [true] if [x] has already been forced and did not raise an exception. @since 4.00 kXlZ8J@@@@@@@D@@@@@@@@@V(from_val\LP\LX@б@А!a@C@3@kf4@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@Rc6@Acjycj{@@А!b@ C@ cjcj@@@ @@@@б@г`!tcjcj@А!a'"cjcj@@@-@@@) @@гu!tcjcj@А!b/7cjcj@@@5@@@> @@@@@A@@@4@@D$cjx@@@'cjj@m 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 4d5q@@@@@@@MF@@'@}H@@@@@@dVU {1 Advanced} The following definitions are for advanced uses only; they require familiarity with the lazy compilation scheme to be used appropriately. RtSw#o@@@@@@3QPPQQQQQ@v1@A(from_fun^yqu_yq}@б@б@г$unitkyqlyq@@ @@@ @@А!a@C@%zyq{yq@@@ @@*@@г렐!tyqyq@А!a8yqyq@@@@@@? @@@@@Byq@@@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@@$@@@@@@@b)force_val@б@г.!t@А!a@C@3@|>@A@@@ @@@ @@А!a @@@ @@@@@@/  [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@@@? @@@@@@1@p7A@B@@n@@f@F@}@]0@@3@D_2@A@ H************************************************************************A@@A@L@ H #BMM$BM@ H OCaml )C*C@ H /D0D3@ H Damien Doligez, projet Para, INRIA Rocquencourt 5E446E4@ H ;F 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. 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}). 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} a 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 X * {1 Advanced} The following definitions are for advanced uses only; they require familiarity with the lazy compilation scheme to be used appropriately. = * [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 [/home/teraram/ci/builds/workspace/parallel-build/flambda/false/label/ocaml-manycores/stdlib @@0{Nтc<