sig
  module type S =
    sig
      type t
      val add : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
      val sub : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
      val mul : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
      val div : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
      val rem : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
      val max_int : Unsigned.S.t
      val logand : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
      val logor : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
      val logxor : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
      val shift_left : Unsigned.S.t -> int -> Unsigned.S.t
      val shift_right : Unsigned.S.t -> int -> Unsigned.S.t
      val of_int : int -> Unsigned.S.t
      val to_int : Unsigned.S.t -> int
      val of_int64 : int64 -> Unsigned.S.t
      val to_int64 : Unsigned.S.t -> int64
      val of_string : string -> Unsigned.S.t
      val to_string : Unsigned.S.t -> string
      val zero : Unsigned.S.t
      val one : Unsigned.S.t
      val lognot : Unsigned.S.t -> Unsigned.S.t
      val succ : Unsigned.S.t -> Unsigned.S.t
      val pred : Unsigned.S.t -> Unsigned.S.t
      val compare : Unsigned.S.t -> Unsigned.S.t -> int
      val max : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
      val min : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
      module Infix :
        sig
          val ( + ) : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
          val ( - ) : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
          val ( * ) : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
          val ( / ) : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
          val ( mod ) : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
          val ( land ) : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
          val ( lor ) : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
          val ( lxor ) : Unsigned.S.t -> Unsigned.S.t -> Unsigned.S.t
          val ( lsl ) : Unsigned.S.t -> int -> Unsigned.S.t
          val ( lsr ) : Unsigned.S.t -> int -> Unsigned.S.t
        end
    end
  module UChar :
    sig
      type t = private int
      val add : t -> t -> t
      val sub : t -> t -> t
      val mul : t -> t -> t
      val div : t -> t -> t
      val rem : t -> t -> t
      val max_int : t
      val logand : t -> t -> t
      val logor : t -> t -> t
      val logxor : t -> t -> t
      val shift_left : t -> int -> t
      val shift_right : t -> int -> t
      val of_int : int -> t
      val to_int : t -> int
      val of_int64 : int64 -> t
      val to_int64 : t -> int64
      val of_string : string -> t
      val to_string : t -> string
      val zero : t
      val one : t
      val lognot : t -> t
      val succ : t -> t
      val pred : t -> t
      val compare : t -> t -> int
      val max : t -> t -> t
      val min : t -> t -> t
      module Infix :
        sig
          val ( + ) : t -> t -> t
          val ( - ) : t -> t -> t
          val ( * ) : t -> t -> t
          val ( / ) : t -> t -> t
          val ( mod ) : t -> t -> t
          val ( land ) : t -> t -> t
          val ( lor ) : t -> t -> t
          val ( lxor ) : t -> t -> t
          val ( lsl ) : t -> int -> t
          val ( lsr ) : t -> int -> t
        end
    end
  module UInt8 :
    sig
      type t = private int
      val add : t -> t -> t
      val sub : t -> t -> t
      val mul : t -> t -> t
      val div : t -> t -> t
      val rem : t -> t -> t
      val max_int : t
      val logand : t -> t -> t
      val logor : t -> t -> t
      val logxor : t -> t -> t
      val shift_left : t -> int -> t
      val shift_right : t -> int -> t
      val of_int : int -> t
      val to_int : t -> int
      val of_int64 : int64 -> t
      val to_int64 : t -> int64
      val of_string : string -> t
      val to_string : t -> string
      val zero : t
      val one : t
      val lognot : t -> t
      val succ : t -> t
      val pred : t -> t
      val compare : t -> t -> int
      val max : t -> t -> t
      val min : t -> t -> t
      module Infix :
        sig
          val ( + ) : t -> t -> t
          val ( - ) : t -> t -> t
          val ( * ) : t -> t -> t
          val ( / ) : t -> t -> t
          val ( mod ) : t -> t -> t
          val ( land ) : t -> t -> t
          val ( lor ) : t -> t -> t
          val ( lxor ) : t -> t -> t
          val ( lsl ) : t -> int -> t
          val ( lsr ) : t -> int -> t
        end
    end
  module UInt16 :
    sig
      type t = private int
      val add : t -> t -> t
      val sub : t -> t -> t
      val mul : t -> t -> t
      val div : t -> t -> t
      val rem : t -> t -> t
      val max_int : t
      val logand : t -> t -> t
      val logor : t -> t -> t
      val logxor : t -> t -> t
      val shift_left : t -> int -> t
      val shift_right : t -> int -> t
      val of_int : int -> t
      val to_int : t -> int
      val of_int64 : int64 -> t
      val to_int64 : t -> int64
      val of_string : string -> t
      val to_string : t -> string
      val zero : t
      val one : t
      val lognot : t -> t
      val succ : t -> t
      val pred : t -> t
      val compare : t -> t -> int
      val max : t -> t -> t
      val min : t -> t -> t
      module Infix :
        sig
          val ( + ) : t -> t -> t
          val ( - ) : t -> t -> t
          val ( * ) : t -> t -> t
          val ( / ) : t -> t -> t
          val ( mod ) : t -> t -> t
          val ( land ) : t -> t -> t
          val ( lor ) : t -> t -> t
          val ( lxor ) : t -> t -> t
          val ( lsl ) : t -> int -> t
          val ( lsr ) : t -> int -> t
        end
    end
  module UInt32 :
    sig
      type t
      val add : t -> t -> t
      val sub : t -> t -> t
      val mul : t -> t -> t
      val div : t -> t -> t
      val rem : t -> t -> t
      val max_int : t
      val logand : t -> t -> t
      val logor : t -> t -> t
      val logxor : t -> t -> t
      val shift_left : t -> int -> t
      val shift_right : t -> int -> t
      val of_int : int -> t
      val to_int : t -> int
      val of_int64 : int64 -> t
      val to_int64 : t -> int64
      val of_string : string -> t
      val to_string : t -> string
      val zero : t
      val one : t
      val lognot : t -> t
      val succ : t -> t
      val pred : t -> t
      val compare : t -> t -> int
      val max : t -> t -> t
      val min : t -> t -> t
      module Infix :
        sig
          val ( + ) : t -> t -> t
          val ( - ) : t -> t -> t
          val ( * ) : t -> t -> t
          val ( / ) : t -> t -> t
          val ( mod ) : t -> t -> t
          val ( land ) : t -> t -> t
          val ( lor ) : t -> t -> t
          val ( lxor ) : t -> t -> t
          val ( lsl ) : t -> int -> t
          val ( lsr ) : t -> int -> t
        end
      val of_int32 : int32 -> t
      val to_int32 : t -> int32
    end
  module UInt64 :
    sig
      type t
      val add : t -> t -> t
      val sub : t -> t -> t
      val mul : t -> t -> t
      val div : t -> t -> t
      val rem : t -> t -> t
      val max_int : t
      val logand : t -> t -> t
      val logor : t -> t -> t
      val logxor : t -> t -> t
      val shift_left : t -> int -> t
      val shift_right : t -> int -> t
      val of_int : int -> t
      val to_int : t -> int
      val of_string : string -> t
      val to_string : t -> string
      val zero : t
      val one : t
      val lognot : t -> t
      val succ : t -> t
      val pred : t -> t
      val compare : t -> t -> int
      val max : t -> t -> t
      val min : t -> t -> t
      module Infix :
        sig
          val ( + ) : t -> t -> t
          val ( - ) : t -> t -> t
          val ( * ) : t -> t -> t
          val ( / ) : t -> t -> t
          val ( mod ) : t -> t -> t
          val ( land ) : t -> t -> t
          val ( lor ) : t -> t -> t
          val ( lxor ) : t -> t -> t
          val ( lsl ) : t -> int -> t
          val ( lsr ) : t -> int -> t
        end
      val of_int64 : int64 -> t
      val to_int64 : t -> int64
    end
  module Size_t : S
  module UShort : S
  module UInt : S
  module ULong : S
  module ULLong : S
  type uchar = Unsigned.UChar.t
  type uint8 = Unsigned.UInt8.t
  type uint16 = Unsigned.UInt16.t
  type uint32 = Unsigned.UInt32.t
  type uint64 = Unsigned.UInt64.t
  type size_t = Size_t.t
  type ushort = UShort.t
  type uint = UInt.t
  type ulong = ULong.t
  type ullong = ULLong.t
  val of_byte_size : int -> (module Unsigned.S)
end