Std.FutureFuture is an object whose value will be decided somewhere in the future, if that future has occurred.
Futures can be seen as memory cells that can be set only once, thus having two states: empty and filled.
A future may occur at some point of physical time. A future is total. If a promise cannot be fulfilled due to an error, that just means, that in this world this future is not possible. Thus the future object models nonlinear tree-like time. To represent a computation, that has different futures, one can use either a sum type as a future value, or a tuple of futures. The former is preferred, if different future is decidable (i.e., only one path is possible). The latter is preferred if different variants are possible.
A future is a monad, and it is preferred to work with the future via the monadic interface, e.g.,
let first_insn mem pc : mem Or_error.t future =
  Future.(Stream.nth pc 0 >>= fun fst ->
          Stream.nth pc 1 >>= fun snd ->
          return (Memory.range mem fst snd))Note: the future is a common denominator between lwt thread, async deferred, native ocaml event, or any other value, that is defined asynchronously. Once can also think of futures and threads as a software pattern to work with callbacks.
type 'a t = 'a futureinclude Monads.Std.Monad.S with type 'a t := 'a tsequence xs computes a sequence of computations xs in the left to right order.
module Fn : sig ... endVarious function combinators lifted into the Kleisli category.
module Pair : sig ... endThe pair interface lifted into the monad.
module Triple : sig ... endThe triple interface lifted into a monad.
module Lift : sig ... endLifts functions into the monad.
module Exn : sig ... endInteracting between monads and language exceptions
module Collection : sig ... endLifts collection interface into the monad.
module List : Collection.S with type 'a t := 'a listThe Monad.Collection.S interface for lists
module Seq : Collection.S with type 'a t := 'a Core_kernel.Sequence.tThe Monad.Collection.S interface for sequences
include Monads.Std.Monad.Syntax.S with type 'a t := 'a tval (!!) : 'a -> 'a t!!x is return x
!$$$$f is Lift.quaternary f
include Monads.Std.Monad.Syntax.Let.S with type 'a t := 'a tmodule Let : Monads.Std.Monad.Syntax.Let.S with type 'a t := 'a tMonadic operators, see Monad.Syntax.S for more.
module Syntax : Monads.Std.Monad.Syntax.S with type 'a t := 'a tMonadic operators, see Monad.Syntax.S for more.
include Core_kernel.Applicative.S with type 'a t := 'a tval return : 'a -> 'a tmodule Applicative_infix : sig ... endmodule Variadic : Variadic.S with type 'a arg = 'a tmodule Args : sig ... endcreate () creates a new future. The function returns a pair of the future itself and a promise that can be used to fulfill the future.
val upon : 'a t -> ('a -> unit) -> unitupon f action will call action as soon a future f occurs.
val is_decided : 'a t -> boolis_decided f is true if a future f is already decided.
val peek : 'a t -> 'a optionpeek f will return Some value if future f has already occurred with this value.
val peek_exn : 'a t -> 'apeek_exn f will evaluate to x iff is_decided f && peek f x = Some x