sig
  type +'a t
  type kind =
      [ `bitmap
      | `byte
      | `double
      | `float
      | `int
      | `long
      | `short
      | `ubyte
      | `uint
      | `ulong
      | `ushort ]
  type fkind = [ `double | `float ]
  type ikind =
      [ `bitmap
      | `byte
      | `int
      | `long
      | `short
      | `ubyte
      | `uint
      | `ulong
      | `ushort ]
  type lkind = [ `int | `long | `uint | `ulong ]
  val create : ([< Raw.kind ] as 'a) -> len:int -> 'Raw.t
  val create_static : ([< Raw.kind ] as 'a) -> len:int -> 'Raw.t
  val free_static : 'Raw.t -> unit
  val kind : 'Raw.t -> 'a
  val byte_size : 'Raw.t -> int
  val static : 'Raw.t -> bool
  val cast : 'Raw.t -> kind:([< Raw.kind ] as 'b) -> 'Raw.t
  external sizeof : [< Raw.kind ] -> int = "ml_raw_sizeof"
  val length : [< Raw.kind ] Raw.t -> int
  val sub : ([< Raw.kind ] as 'a) Raw.t -> pos:int -> len:int -> 'Raw.t
  external get : [< Raw.ikind ] Raw.t -> pos:int -> int = "ml_raw_get"
  external set : [< Raw.ikind ] Raw.t -> pos:int -> int -> unit
    = "ml_raw_set"
  external get_float : [< Raw.fkind ] Raw.t -> pos:int -> float
    = "ml_raw_get_float"
  external set_float : [< Raw.fkind ] Raw.t -> pos:int -> float -> unit
    = "ml_raw_set_float"
  external get_hi : [< Raw.lkind ] Raw.t -> pos:int -> int = "ml_raw_get_hi"
  external set_hi : [< Raw.lkind ] Raw.t -> pos:int -> int -> unit
    = "ml_raw_set_hi"
  external get_lo : [< Raw.lkind ] Raw.t -> pos:int -> int = "ml_raw_get_lo"
  external set_lo : [< Raw.lkind ] Raw.t -> pos:int -> int -> unit
    = "ml_raw_set_lo"
  external get_long : [< Raw.lkind ] Raw.t -> pos:int -> nativeint
    = "ml_raw_get_long"
  external set_long : [< Raw.lkind ] Raw.t -> pos:int -> nativeint -> unit
    = "ml_raw_set_long"
  val gets : [< Raw.ikind ] Raw.t -> pos:int -> len:int -> int array
  val sets : [< Raw.ikind ] Raw.t -> pos:int -> int array -> unit
  val gets_float : [< Raw.fkind ] Raw.t -> pos:int -> len:int -> float array
  val sets_float : [< Raw.fkind ] Raw.t -> pos:int -> float array -> unit
  val gets_string : 'Raw.t -> pos:int -> len:int -> string
  val sets_string : 'Raw.t -> pos:int -> string -> unit
  val of_array : int array -> kind:([< Raw.ikind ] as 'a) -> 'Raw.t
  val of_float_array : float array -> kind:([< Raw.fkind ] as 'a) -> 'Raw.t
  val of_string : string -> kind:([< Raw.kind ] as 'a) -> 'Raw.t
  val of_matrix :
    float array array -> kind:([< Raw.fkind ] as 'a) -> 'Raw.t
end