Base.OptionThe option type indicates whether a meaningful value is present. It is frequently used to represent success or failure, using None for failure. To be more descriptive about why a function failed, see the Or_error module.
Usage example from a utop session follows. Hash table lookups use the option type to indicate success or failure when looking up a key.
  # let h = Hashtbl.of_alist (module String) [ ("Bar", "Value") ];;
  val h : (string, string) Hashtbl.t = <abstr>;;
  - : (string, string) Hashtbl.t = <abstr>
  # Hashtbl.find h "Foo";;
  - : string option = None
  # Hashtbl.find h "Bar";;
  - : string option = Some "Value"val hash_fold_t : 
  (Hash.state -> 'a -> Hash.state) ->
  Hash.state ->
  'a t ->
  Hash.stateval t_sexp_grammar : 'a Sexplib0.Sexp_grammar.t -> 'a t Sexplib0.Sexp_grammar.tinclude Equal.S1 with type 'a t := 'a tval equal : 'a Equal.equal -> 'a t Equal.equalinclude Invariant.S1 with type 'a t := 'a tval invariant : ('a -> unit) -> 'a t -> unitinclude Sexpable.S1 with type 'a t := 'a tval t_of_sexp : (Sexplib0.Sexp.t -> 'a) -> Sexplib0.Sexp.t -> 'a tval sexp_of_t : ('a -> Sexplib0.Sexp.t) -> 'a t -> Sexplib0.Sexp.tOptions form an applicative, where:
return x = Some xNone <*> x = NoneSome f <*> None = NoneSome f <*> Some x = Some (f x)include Applicative.S_local with type 'a t := 'a tmodule Applicative_infix : sig ... endOptions form a monad, where:
return x = Some x(None >>= f) = None(Some x >>= f) = f xinclude Monad.S_local with type 'a t := 'a tt >>= f returns a computation that sequences the computations represented by two monad elements. The resulting computation first does t to yield a value v, and then runs the computation returned by f v.
module Monad_infix : sig ... endval return : 'a -> 'a treturn v returns the (trivial) computation that returns v.
ignore_m t is map t ~f:(fun _ -> ()). ignore_m used to be called ignore, but we decided that was a bad name, because it shadowed the widely used Stdlib.ignore. Some monads still do let ignore = ignore_m for historical reasons.
Like all, but ensures that every monadic value in the list produces a unit value, all of which are discarded rather than being collected into a list.
module Let_syntax : sig ... endThese are convenient to have in scope when programming with a monad:
val value : 'a t -> default:'a -> 'aExtracts the underlying value if present, otherwise returns default.
val value_exn : 
  ?here:Lexing.position ->
  ?error:Error.t ->
  ?message:string ->
  'a t ->
  'aExtracts the underlying value, or raises if there is no value present. The error raised can be augmented using the ~here, ~error, and ~message optional arguments.
val value_map : 'a t -> default:'b -> f:('a -> 'b) -> 'bExtracts the underlying value and applies f to it if present, otherwise returns default.
val value_or_thunk : 'a t -> default:(unit -> 'a) -> 'aExtracts the underlying value if present, otherwise executes and returns the result of default. default is only executed if the underlying value is absent.
val fold : 'a t -> init:'acc -> f:('acc -> 'a -> 'acc) -> 'accOn None, returns init. On Some x, returns f init x.
val mem : 'a t -> 'a -> equal:('a -> 'a -> bool) -> boolChecks whether the provided element is there, using equal.
val length : 'a t -> intval iter : 'a t -> f:('a -> unit) -> unitval exists : 'a t -> f:('a -> bool) -> boolOn None, returns false. On Some x, returns f x.
val for_all : 'a t -> f:('a -> bool) -> boolOn None, returns true. On Some x, returns f x.
val find : 'a t -> f:('a -> bool) -> 'a optionfind t ~f returns t if t = Some x and f x = true; otherwise, find returns None.
val find_map : 'a t -> f:('a -> 'b option) -> 'b optionOn None, returns None. On Some x, returns f x.
val to_list : 'a t -> 'a listval to_array : 'a t -> 'a arrayval call : 'a -> f:('a -> unit) t -> unitcall x f runs an optional function ~f on the argument.
merge a b ~f merges together the values from a and b using f. If both a and b are None, returns None. If only one is Some, returns that one, and if both are Some, returns Some of the result of applying f to the contents of a and b.
val try_with : (unit -> 'a) -> 'a ttry_with f returns Some x if f returns x and None if f raises an exception. See Result.try_with if you'd like to know which exception.
try_with_join f returns the optional value returned by f if it exits normally, and None if f raises an exception.
val some : 'a -> 'a tWraps the Some constructor as a function.
first_some t1 t2 returns t1 if it has an underlying value, or t2 otherwise.
val some_if : bool -> 'a -> 'a tsome_if b x converts a value x to Some x if b, and None otherwise.
val is_none : 'a t -> boolis_none t returns true iff t = None.
val is_some : 'a t -> boolis_some t returns true iff t = Some x.