Stdlib.Lazy(3)
π Stdlib.Lazy(3) β the OCaml library manual, but make it make sense π
okay so this is the OCaml library manual page for Stdlib.Lazy, bestie. Manual name folded in near the top like a little name tag β no copied header line here, just vibes and facts. π
π NAME π
Stdlib.Lazy β no description.
(Like, the source page literally says βno descriptionβ, so we're not gonna invent one, periodt. π)
π¦ Module π¦
Module Stdlib.Lazy
β¨ Documentation β¨
Module Lazy : (module Stdlib__Lazy)
type 'a t = 'a CamlinternalLazy.t
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_tis the built-in type constructor used by the compiler for thelazykeyword. You should not use it directly. Always useLazy.tinstead.
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-rectypesoption, ill-founded recursive definitions of the formlet rec x = lazy xorlet 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-rectypesoption, such ill-founded recursive definitions are rejected by the type-checker.
exception Undefinedβ Raised when forcing a suspension concurrently from multiple fibers, systhreads or domains, or when the suspension tries to force itself recursively.val force : 'a t -> 'aβforce xforces the suspensionxand returns its result. Ifxhas already been forced,Lazy.force xreturns the same value again without recomputing it. If it raised an exception, the same exception is raised again.
Raises Undefined (see Lazy.Undefined).
π Iterators π
val map : ('a -> 'b) -> 'a t -> 'b tβmap f xreturns a suspension that, when forced, forcesxand appliesfto its value.
It is equivalent to lazy (f (Lazy.force x)).
Since 4.13
π§ Reasoning on already-forced suspensions π§
val is_val : 'a t -> boolβis_val xreturnstrueifxhas already been forced and did not raise an exception.
Since 4.00
val from_val : 'a -> 'a tβfrom_val vevaluatesvfirst (as any function would) and returns an already-forced suspension of its result. It is the same aslet x = v in lazy x, but uses dynamic tests to optimize suspension creation in some cases.
Since 4.00
val map_val : ('a -> 'b) -> 'a t -> 'b tβmap_val f xappliesfdirectly ifxis already forced, otherwise it behaves asmap 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
π₯ Advanced π₯
The following definitions are for advanced uses only; they require familiarity with the lazy compilation scheme to be used appropriately.
val from_fun : (unit -> 'a) -> 'a tβfrom_fun fis the same aslazy (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
val force_val : 'a t -> 'aβforce_val xforces the suspensionxand returns its result. Ifxhas already been forced,force_val xreturns 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 Lazy.Undefined.
Raises Undefined if the forcing of x tries to force x itself recursively.
Raises Undefined (see Lazy.Undefined).
module Mutexed : sig endβ that's the entire shown signature, bestie β slay, it's giving advanced-module energy. π«Ά
π Cute sign-off: this page came from OCamldoc, with version/date 2026-06-22, and it's the Stdlib.Lazy(3) page. Bye bestie, go force your suspensions! π β¨
π¦ where this page comes from
- arch rolling: ocaml 5.5.0-1 Β· LGPL2.1 AND custom: QPL-1.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms