ocaml-integers library provides a number of 8-, 16-, 32- and 64-bit signed and unsigned integer types, together with aliases such as
size_t whose sizes depend on the host platform.
The behaviour also follows the standard library; for example, conversions such as
of_inttruncate, 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 = false
Integers 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 = 1000