Caml1999I031 cN*,Stdlib__Lazy!t8!a@@A@A0CamlinternalLazy!t @@@ҠY@@@@@(lazy.mliRVVRVw@@@@@A@ )Undefined #exnG@@@A&_none_@@A@)AB@%force@0!a@@@@@@Ր+%lazy_forceAA @@@'|  (|  @@BB@#map@@!a@!b@@@@% @@@) @@@@@@@@FG f fGG f @@aC@&is_val @8!a@@@@$boolE@@@@@@_R m m`R m @@zD@(from_val!@!a@U@@@@@@rW  sW @@E@'map_val"@@!a@!b@@@@p @@@t @@@@@@@@^^F@@F@(from_fun#@@$unitF@@@!a@@@@@@@@@t%%t%H@@G@)force_val$@!a@@@@@@@}XX}Xr@@H@-lazy_from_fun%@@.@@@!a@@@@@@@@@H{@0ocaml.deprecatedHMH]@:Use Lazy.from_fun instead.H_Hy@@H^Hz@@@@@HJ@@ I@-lazy_from_val&@!a@@@@@@@@0ocaml.deprecated  @:Use Lazy.from_val instead.@@@@@@@@@4J@+lazy_is_val'@ !a@@@@@@@@@@0''1Fw@0ocaml.deprecated7FK8F[@8Use Lazy.is_val instead.BF]CFu@@EF\FFv@@@@@HFH@@bK@@N>,Stdlib__Lazy0'rruSZY&Stdlib0>,W:(0CamlinternalLazy0G -Ϥ;I8CamlinternalFormatBasics0cEXyRV^?RV_@А!a@0EDDEEEEE@D8@@@A@A@B@@@B@B@G@B@@@[RVV\RVw@)ocaml.docm J 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 thread-safe. If you use this module in a multi-threaded program, you will need to add some locks. 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. jSxxkw  @@@@@@@@@@@AnRV[oRV]@@BA@8.@A@A0CamlinternalLazy!t9C@@@@Y@@@@@'$@@@@Aг0CamlinternalLazyRVe.@А!aFRVbRVd@@@I6@@85@87@)UndefinedBz  z  @ @@@Az  @@A@@@@@0@m6@A @%force|  |  @б@г}!t|  |  @А!a@C@0@"0*@A|  |  @@@ @@@ @@А!a |  |  @@@ @@@@+%lazy_forceAA @@@|  |  @ > [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 if the forcing of [x] tries to force [x] itself recursively. }  C L N@@@@@@@B@@,/ {1 Iterators} E P PE P d@@@@@@0@<W*@A#map G f j G f m@б@б@А!a@C@G f qG f s@@А!b@C@#%G f w&G f y@@@ @@(@@б@г!t3G f 4G f @А!a%8:G f ~;G f @@@+@@@? @@г !tHG f IG f @А!b/MOG f PG f @@@5@@@T @@@@@W@@@4@@Z\G f p@@@_G f f@ [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.0 kH  lN 5 7@@@@@@@C@&@n - {1 Reasoning on already-forced suspensions} |P 9 9}P 9 k@@@@@@0{zz{{{{{@~y#@A&is_valR m qR m w@б@гU!tR m }R m ~@А!a@C@ R m zR m |@@@ @@@'@@г|$boolR m R m @@ @@@4@@@@@7@@@R m m @\ p [is_val x] returns [true] if [x] has already been forced and did not raise an exception. @since 4.00.0 S  U  @@@@@@@D@@J(from_valW W  @б@А!a@C@0@_Z(@AW  W @@г!tW W @А!aW W @@@@@@ @@@!@@@@@W  @ [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.0 X\@@@@@@@E@"@/'map_val^"^)@б@б@А!a@C@0@FW*@A$^-%^/@@А!b@C@ /^30^5@@@ @@@@б@г!t=^=>^>@А!a'"D^:E^<@@@-@@@) @@г!tR^ES^F@А!b/7Y^BZ^D@@@5@@@> @@@@@A@@@4@@Df^,@@@i^@ 2 [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.0 u_GGvlj~@@@@@@@F@&@X {1 Advanced} The following definitions are for advanced uses only; they require familiary with the lazy compilation scheme to be used appropriately. or#@@@@@@0@h{#@A(from_funt%)t%1@б@б@г$unitt%5t%9@@ @@@@@А!a@ C@%t%=t%?@@@ @@*@@г|!tt%Gt%H@А!a8t%Dt%F@@@@@@ ? @@@@@ Bt%4@@@t%%@r  [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.0 uII{BV@@@@@@@G@#@V)force_val}X\}Xe@б@г!t}Xk}Xl@А!a@C@0@up2@A}Xh}Xj@@@ @@@ @@А!a  }Xp }Xr@@@ @@@@@}XX@  [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. ~ss@@@@@@@5H@@%30 {1 Deprecated} ./@@@@@@0-,,-----@5P#@A-lazy_from_fun:#;0@б@б@г$unitG4H8@@ @@@@@А!a@C@%V<W>@@@ @@*@@г$!tbFcG@А!a8iCjE@@@@@@? @@@@@Bs3@@@vwH{@0ocaml.deprecated}HM~H]@:Use Lazy.from_fun instead.H_Hy@@H^Hz@@@@@HJ@2 % @deprecated synonym for [from_fun]. |||@@@@@@@I@('@&n)-lazy_from_val@б@А!a@!C@0@~@@A@@г!t@А!a@@@@@@ @@@!@@@@@@0ocaml.deprecated@:Use Lazy.from_val instead.@@@@@@@@ % @deprecated synonym for [from_val]. %@@@@@@@ J@('@&G)+lazy_is_val'+'6@б@гΠ!t '< '=@А!a@(C@"0@fwJ@A'9';@@@ @@@$ @@г$bool('A)'E@@ @@@%@@@@@&@@@3''4Fw@0ocaml.deprecated:FK;F[@8Use Lazy.is_val instead.EF]FFu@@HF\IFv@@@@@KFH@ # @deprecated synonym for [is_val]. WxxXx@@@@@@@oK@('@&D)@#A@B@@\@@n@Z@@^@9@@vB@@0pooppppp@]xD@A@ H************************************************************************yA@@zA@L@ H BMMBM@ H OCaml CC@ H DD3@ H Damien Doligez, projet Para, INRIA Rocquencourt E44E4@ H FF@ H Copyright 1997 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@9* Deferred computations. ͠ K* 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 thread-safe. If you use this module in a multi-threaded program, you will need to add some locks. 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. f ?* [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 if the forcing of [x] tries to force [x] itself recursively. 栠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.0 n .* {1 Reasoning on already-forced suspensions} ` q* [is_val x] returns [true] if [x] has already been forced and did not raise an exception. @since 4.00.0  * [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.0 ۠ 3* [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.0 p * {1 Advanced} The following definitions are for advanced uses only; they require familiary with the lazy compilation scheme to be used appropriately. b  * [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.0  * [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. Ѡ1* {1 Deprecated} à &* @deprecated synonym for [from_fun]. Z &* @deprecated synonym for [from_val].  $* @deprecated synonym for [is_val]. @D)../ocamlc0-strict-sequence(-absname"-w8+a-4-9-41-42-44-45-48-70"-g+-warn-error"+A*-bin-annot)-nostdlib*-principal,-safe-string/-strict-formats"-o0stdlib__Lazy.cmi"-c  1/home/barsac/ci/builds/workspace/bootstrap/stdlib @0_;u0        @ @@8CamlinternalFormatBasics0cEXy,W:(60'rruSZY@0'rruSZYAL@ba@@@32=;@@$#@@@RQ@հ@@@@@@@@P@