The ocaml-integers library provides a number of 8-, 16-, 32- and 64-bit signed and unsigned integer types, together with aliases such as long and size_t whose sizes depend on the host platform.
The interfaces follow the pattern of the signatures of the Int32, Int64, and Nativeint modules in the OCaml standard library.
The behaviour also follows the standard library; for example, conversions such as of_int truncate, and operations are "modulo" in general:
# Unsigned.UInt8.(pred zero);;
- : Unsigned.UInt8.t = <uint8 255>Top-level printers for each type are included
# Unsigned.UInt32.[of_int 103; one; of_string "1000"];;
- : Unsigned.UInt32.t list = [<uint32 103>; <uint32 1>; <uint32 1000>]Infix operators are available:
# Unsigned.UInt32.(Infix.(one + one));;
- : Unsigned.UInt32.t = <uint32 2>Polymorphic operations such as comparison behave correctly:
# open Unsigned.UInt32
# zero < one;;
- : bool = true
# max_int < zero;;
- : bool = falseIntegers 32 bits and above are boxed; integers below 32 bits are unboxed.
# Obj.(tag (repr Unsigned.UInt32.zero));;
- : int = 255
# Obj.(tag (repr Unsigned.UInt16.zero));;
- : int = 1000integers with js_of_ocamlThe integers_stubs_js package provides JavaScript stubs that make it possible to use this library with js_of_ocaml