uW +55.5.0+dev0-2025-04-28/$Lazy!tA;!a@@A@A0CamlinternalLazy !tB@@@@Y@@@@@5../../stdlib/lazy.mliRrrRr@@@@$Lazy@@A@±)UndefinedB##exnG@@@A{  {  @@A@B@%force@$Lazy!!t!a@C@@@B0CamlinternalLazy!t@@@  &lazy_tP@@@@@@@@$@@ݐ+%lazy_forceAA @@@KA t tLA t @@JB@@#map@@!a@C@!b@C@@@@$Lazy"!t@@@$Lazy#!t@@@@@@@@xL  yL  @@wC@@&is_val@$Lazy$!t!a@C@@@@$bool%@@@@@@WW@@D@@(from_val@!a@C@$Lazy&!t@@@@@@\hh\h@@E@@'map_val@@!a@ C@!b@ C@@@@$Lazy'!t@@@$Lazy(!t@@@@@@@@cc@@F@@(from_fun@@$unit)@@@ !a@C@@@$Lazy*!t@@@@@@yy@@G@@)force_val@$Lazy+!t!a@C@@@@@@@@@H@@@36Deferred computations.@@@@@@@@@@@@A5../../stdlib/lazy.mli#&Lazy.t30A value of type )'a Lazy.t O 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 $expr8, without computing $expr 8 itself yet. "Forcing" the suspension will then compute $expr V and return its result. Matching a suspension with the special pattern syntax -lazy(pattern) E also computes the underlying expression and tries to bind it to 'pattern!:@% y 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 !x8 is always computed.@+ Note: &lazy_t C is the built-in type constructor used by the compiler for the $lazy 7 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 2let 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 U option, such ill-founded recursive definitions are rejected by the type-checker.@@@@@@@@@@@@Y@@A@@@.Lazy.Undefined3 Raised when forcing a suspension concurrently from multiple fibers, systhreads or domains, or when the suspension tries to force itself recursively.@@@@@@@@@@@@@@@@@@*Lazy.force3'force x7 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.@@@@@@@@)Undefined%(see 2G@").@@@@@@ @@@@A@)Iterators@@(Lazy.map3'map f x 4 returns a suspension that, when forced, forces !x- and applies !f. to its value.@9 It is equivalent to 7lazy (f (Lazy.force x))!.@@@@$4.13@@@@@@@@2@5@@@@A@ 'Reasoning on already-forced suspensions@@+Lazy.is_val3(is_val x) returns $true$ if !x < has already been forced and did not raise an exception.@@@@$4.00@@@@@@@@\@@@@-Lazy.from_val3*from_val v+ evaluates !v q first (as any function would) and returns an already-forced suspension of its result. It is the same as 3let x = v in lazy x K, but uses dynamic tests to optimize suspension creation in some cases.@@@@$4.00@@@@@@@@|@@@@,Lazy.map_val3+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 2, or raised only when forcing the thunk otherwise.@' If +map_val f x & does not raise an exception, then 4is_val (map_val f x)- is equal to (is_val x!.@@@@$4.13@@@@@@@@@@@@@頙A@(Advanced@@ The following definitions are for advanced uses only; they require familiarity with the lazy compilation scheme to be used appropriately.@-Lazy.from_fun3*from_fun f0 is the same as +lazy (f ())= but slightly more efficient.@ , It should only be used if the function !f P is already defined. In particular it is always less efficient to write 9from_fun (fun () -> expr)& than )lazy expr!.@@@@$4.00@@@@@@@@@@@@.Lazy.force_val3+force_val x7 forces the suspension !x= and returns its result. If !x> has already been forced, +force_val x 9 returns the same value again without recomputing it.@; If the computation of !x 4 raises an exception, it is unspecified whether +force_val x> raises the same exception or |G@!.@@@@@@@@)Undefined2if the forcing of !x0 tries to force !x8 itself recursively.@)Undefined%(see G@").@@@@@L@hM@@@@@@@:@@A0CamlinternalLazy@@@@@