BaseThis module is the toplevel of the Base library; it's what you get when you write open Base.
The goal of Base is both to be a more complete standard library, with richer APIs, and to be more consistent in its design. For instance, in the standard library some things have modules and others don't; in Base, everything is a module.
Base extends some modules and data structures from the standard library, like Array, Buffer, Bytes, Char, Hashtbl, Int32, Int64, Lazy, List, Map, Nativeint, Printf, Random, Set, String, Sys, and Uchar. One key difference is that Base doesn't use exceptions as much as the standard library and instead makes heavy use of the Result type, as in:
type ('a,'b) result = Ok of 'a | Error of 'b Base also adds entirely new modules, most notably:
Comparable, Comparator, and Comparisons in lieu of polymorphic compare.Container, which provides a consistent interface across container-like data structures (arrays, lists, strings).Result, Error, and Or_error, supporting the or-error pattern.module Applicative : sig ... endmodule Array : sig ... endFixed-length, mutable vector of elements with O(1) get and set operations.
module Avltree : sig ... endA low-level, mutable AVL tree.
module Backtrace : sig ... endModule for managing stack backtraces.
module Binary_search : sig ... endFunctions for performing binary searches over ordered sequences given length and get functions.
module Binary_searchable : sig ... endmodule Blit : sig ... endmodule Bool : sig ... endBoolean type extended to be enumerable, hashable, sexpable, comparable, and stringable.
module Buffer : sig ... endExtensible character buffers.
module Bytes : sig ... endOCaml's byte sequence type, semantically similar to a char array, but taking less space in memory.
module Char : sig ... endA type for 8-bit characters.
module Comparable : sig ... endDefines functors for making modules comparable.
module Comparator : sig ... endComparison and serialization for a type, using a witness type to distinguish between comparison functions with different behavior.
module Comparisons : sig ... endInterfaces for infix comparison operators and comparison functions.
module Container : sig ... endmodule Either : sig ... endmodule Equal : sig ... endThis module defines signatures that are to be included in other signatures to ensure a consistent interface to equal functions. There is a signature (S, S1, S2, S3) for each arity of type. Usage looks like:
module Error : sig ... endA lazy string, implemented with Info, but intended specifically for error messages.
module Exn : sig ... endExceptions.
module Field : sig ... endOCaml record field.
module Float : sig ... endFloating-point representation and utilities.
module Floatable : sig ... endModule type with float conversion functions.
module Fn : sig ... endVarious combinators for functions.
module Formatter : sig ... endThe Format.formatter type from OCaml's standard library, exported here for convenience and compatibility with other libraries.
module Hash : sig ... endmodule Hash_set : sig ... endmodule Hashable : sig ... endmodule Hasher : sig ... endSignatures required of types which can be used in [@@deriving hash].
module Hashtbl : sig ... endA hash table is a mutable data structure implementing a map between keys and values. It supports constant-time lookup and in-place modification.
module Identifiable : sig ... endmodule Indexed_container : sig ... endProvides generic signatures for containers that support indexed iteration (iteri, foldi, ...). In principle, any container that has iter can also implement iteri, but the idea is that Indexed_container_intf should be included only for containers that have a meaningful underlying ordering.
module Info : sig ... endmodule Int : sig ... endmodule Int_conversions : sig ... endConversions between various integer types
module Int32 : sig ... endAn int of exactly 32 bits, regardless of the machine.
module Int63 : sig ... end63-bit integers.
module Int64 : sig ... end64-bit integers.
module Intable : sig ... endFunctor that adds integer conversion functions to a module.
module Int_math : sig ... endThis module implements derived integer operations (e.g., modulo, rounding to multiples) based on other basic operations.
module Invariant : sig ... endThis module defines signatures that are to be included in other signatures to ensure a consistent interface to invariant-style functions. There is a signature (S, S1, S2, S3) for each arity of type. Usage looks like:
module Lazy : sig ... endA value of type 'a Lazy.t is a deferred computation, called a suspension, that has a result of type 'a.
module List : sig ... endImmutable, singly-linked lists, giving fast access to the front of the list, and slow (i.e., O(n)) access to the back of the list. The comparison functions on lists are lexicographic.
module Map : sig ... endMap is a functional data structure (balanced binary tree) implementing finite maps over a totally-ordered domain, called a "key".
module Maybe_bound : sig ... endUsed for specifying a bound (either upper or lower) as inclusive, exclusive, or unbounded.
module Monad : sig ... endA monad is an abstraction of the concept of sequencing of computations. A value of type 'a monad represents a computation that returns a value of type 'a.
module Nativeint : sig ... endProcessor-native integers.
module Nothing : sig ... endAn uninhabited type. This is useful when interfaces require that a type be specified, but the implementer knows this type will not be used in their implementation of the interface.
module Option : sig ... endThe 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.
module Option_array : sig ... end'a Option_array.t is a compact representation of 'a option array: it avoids allocating heap objects representing Some x, usually representing them with x instead. It uses a special representation for None that's guaranteed to never collide with any representation of Some x.
module Or_error : sig ... endType for tracking errors in an Error.t. This is a specialization of the Result type, where the Error constructor carries an Error.t.
module Ordered_collection_common : sig ... endFunctions for ordered collections.
module Ordering : sig ... endOrdering is intended to make code that matches on the result of a comparison more concise and easier to read.
module Poly : sig ... endA module containing the ad-hoc polymorphic comparison functions. Useful when you want to use polymorphic compare in some small scope of a file within which polymorphic compare has been hidden
module Popcount : sig ... endmodule Pretty_printer : sig ... endA list of pretty printers for various types, for use in toplevels.
module Printf : sig ... endFunctions for formatted output.
module Linked_queue : sig ... endThis module is a Base-style wrapper around OCaml's standard Queue module.
module Queue : sig ... endA queue implemented with an array.
module Random : sig ... endPseudo-random number generation.
module Ref : sig ... endModule for the type ref, mutable indirection cells r containing a value of type 'a, accessed with !r and set by r := a.
module Result : sig ... endResult is often used to handle error messages.
module Sequence : sig ... endA sequence of elements that can be produced one at a time, on demand, normally with no sharing.
module Set : sig ... endSets based on Comparator.S.
module Sexpable : sig ... endProvides functors for making modules sexpable when you want the sexp representation of one type to be the same as that for some other isomorphic type.
module Sign : sig ... endA type for representing the sign of a numeric value.
module Sign_or_nan : sig ... endAn extension to Sign with a Nan constructor, for representing the sign of float-like numeric values.
module Source_code_position : sig ... endOne typically obtains a Source_code_position.t using a [%here] expression, which is implemented by the ppx_here preprocessor.
module Stack : sig ... endmodule Staged : sig ... endA type for making staging explicit in the type of a function.
module String : sig ... endAn extension of the standard StringLabels. If you open Base, you'll get these extensions in the String module.
module Stringable : sig ... endProvides type-specific conversion functions to and from string.
module Sys : sig ... endCross-platform system configuration values.
module T : sig ... endThis module defines various abstract interfaces that are convenient when one needs a module that matches a bare signature with just a type. This sometimes occurs in functor arguments and in interfaces.
module Type_equal : sig ... endThe purpose of Type_equal is to represent type equalities that the type checker otherwise would not know, perhaps because the type equality depends on dynamic data, or perhaps because the type system isn't powerful enough.
module Uniform_array : sig ... endSame semantics as 'a Array.t, except it's guaranteed that the representation array is not tagged with Double_array_tag, the tag for float arrays.
module Unit : sig ... endModule for the type unit.
module Uchar : sig ... endUnicode character operations.
module Variant : sig ... endFirst-class representative of an individual variant in a variant type, used in [@@deriving variants].
module With_return : sig ... endwith_return f allows for something like the return statement in C within f.
module Word_size : sig ... endFor determining the word size that the program is using.
module Sexp : sig ... endmodule Export : sig ... endinclude module type of struct include Export endtype 'a array = 'a Array.tval array_of_sexp : 'a. (Sexplib0.Sexp.t -> 'a) -> Sexplib0.Sexp.t -> 'a arrayval sexp_of_array : 'a. ('a -> Sexplib0.Sexp.t) -> 'a array -> Sexplib0.Sexp.tval array_sexp_grammar : 
  'a. 'a Sexplib0.Sexp_grammar.t ->
  'a array Sexplib0.Sexp_grammar.ttype bool = Bool.tval hash_fold_bool : Hash.state -> bool -> Hash.stateval hash_bool : bool -> Hash.hash_valueval bool_of_sexp : Sexplib0.Sexp.t -> boolval sexp_of_bool : bool -> Sexplib0.Sexp.tval bool_sexp_grammar : bool Sexplib0.Sexp_grammar.ttype char = Char.tval hash_fold_char : Hash.state -> char -> Hash.stateval hash_char : char -> Hash.hash_valueval char_of_sexp : Sexplib0.Sexp.t -> charval sexp_of_char : char -> Sexplib0.Sexp.tval char_sexp_grammar : char Sexplib0.Sexp_grammar.ttype exn = Exn.tval sexp_of_exn : exn -> Sexplib0.Sexp.ttype float = Float.tval hash_fold_float : Hash.state -> float -> Hash.stateval hash_float : float -> Hash.hash_valueval float_of_sexp : Sexplib0.Sexp.t -> floatval sexp_of_float : float -> Sexplib0.Sexp.tval float_sexp_grammar : float Sexplib0.Sexp_grammar.ttype int = Int.tval hash_fold_int : Hash.state -> int -> Hash.stateval hash_int : int -> Hash.hash_valueval int_of_sexp : Sexplib0.Sexp.t -> intval sexp_of_int : int -> Sexplib0.Sexp.tval int_sexp_grammar : int Sexplib0.Sexp_grammar.ttype int32 = Int32.tval hash_fold_int32 : Hash.state -> int32 -> Hash.stateval hash_int32 : int32 -> Hash.hash_valueval int32_of_sexp : Sexplib0.Sexp.t -> int32val sexp_of_int32 : int32 -> Sexplib0.Sexp.tval int32_sexp_grammar : int32 Sexplib0.Sexp_grammar.ttype int64 = Int64.tval hash_fold_int64 : Hash.state -> int64 -> Hash.stateval hash_int64 : int64 -> Hash.hash_valueval int64_of_sexp : Sexplib0.Sexp.t -> int64val sexp_of_int64 : int64 -> Sexplib0.Sexp.tval int64_sexp_grammar : int64 Sexplib0.Sexp_grammar.ttype 'a list = 'a List.tval hash_fold_list : 
  'a. (Hash.state -> 'a -> Hash.state) ->
  Hash.state ->
  'a list ->
  Hash.stateval list_of_sexp : 'a. (Sexplib0.Sexp.t -> 'a) -> Sexplib0.Sexp.t -> 'a listval sexp_of_list : 'a. ('a -> Sexplib0.Sexp.t) -> 'a list -> Sexplib0.Sexp.tval list_sexp_grammar : 
  'a. 'a Sexplib0.Sexp_grammar.t ->
  'a list Sexplib0.Sexp_grammar.ttype nativeint = Nativeint.tval hash_fold_nativeint : Hash.state -> nativeint -> Hash.stateval hash_nativeint : nativeint -> Hash.hash_valueval nativeint_of_sexp : Sexplib0.Sexp.t -> nativeintval sexp_of_nativeint : nativeint -> Sexplib0.Sexp.tval nativeint_sexp_grammar : nativeint Sexplib0.Sexp_grammar.ttype 'a option = 'a Option.tval hash_fold_option : 
  'a. (Hash.state -> 'a -> Hash.state) ->
  Hash.state ->
  'a option ->
  Hash.stateval option_of_sexp : 
  'a. (Sexplib0.Sexp.t -> 'a) ->
  Sexplib0.Sexp.t ->
  'a optionval sexp_of_option : 
  'a. ('a -> Sexplib0.Sexp.t) ->
  'a option ->
  Sexplib0.Sexp.tval option_sexp_grammar : 
  'a. 'a Sexplib0.Sexp_grammar.t ->
  'a option Sexplib0.Sexp_grammar.ttype 'a ref = 'a Ref.tval ref_of_sexp : 'a. (Sexplib0.Sexp.t -> 'a) -> Sexplib0.Sexp.t -> 'a refval sexp_of_ref : 'a. ('a -> Sexplib0.Sexp.t) -> 'a ref -> Sexplib0.Sexp.tval ref_sexp_grammar : 
  'a. 'a Sexplib0.Sexp_grammar.t ->
  'a ref Sexplib0.Sexp_grammar.ttype string = String.tval hash_fold_string : Hash.state -> string -> Hash.stateval hash_string : string -> Hash.hash_valueval string_of_sexp : Sexplib0.Sexp.t -> stringval sexp_of_string : string -> Sexplib0.Sexp.tval string_sexp_grammar : string Sexplib0.Sexp_grammar.ttype bytes = Bytes.tval bytes_of_sexp : Sexplib0.Sexp.t -> bytesval sexp_of_bytes : bytes -> Sexplib0.Sexp.tval bytes_sexp_grammar : bytes Sexplib0.Sexp_grammar.ttype unit = Unit.tval hash_fold_unit : Hash.state -> unit -> Hash.stateval hash_unit : unit -> Hash.hash_valueval unit_of_sexp : Sexplib0.Sexp.t -> unitval sexp_of_unit : unit -> Sexplib0.Sexp.tval unit_sexp_grammar : unit Sexplib0.Sexp_grammar.tFormat stuff
type nonrec ('a, 'b, 'c) format = ('a, 'b, 'c) formattype nonrec ('a, 'b, 'c, 'd) format4 = ('a, 'b, 'c, 'd) format4type nonrec ('a, 'b, 'c, 'd, 'e, 'f) format6 = ('a, 'b, 'c, 'd, 'e, 'f) format6List operators
include module type of struct include List.Infix endInt operators and comparisons
Float operators
include module type of struct include Float.O_dot endSimilar to O, except that operators are suffixed with a dot, allowing one to have both int and float operators in scope simultaneously.
Similar to O, except that operators are suffixed with a dot, allowing one to have both int and float operators in scope simultaneously.
Reverse application operator. x |> g |> f is equivalent to f (g (x)).
Boolean operations
val ignore : _ -> unitReference operations
val (!) : 'a ref -> 'aval ref : 'a -> 'a refPair operations
Exceptions stuff
val raise : exn -> _val raise_s : Sexp.t -> 'aMisc
val phys_equal : 'a -> 'a -> boolval force : 'a Lazy.t -> 'amodule Continue_or_stop = Container.Continue_or_stopContinue_or_stop.t is used by the f argument to fold_until in order to indicate whether folding should continue, or stop early.
exception Not_found_s of Sexplib0.Sexp.t