sig
  module type TYPE =
    sig
      type 'a typ
      val void : unit Ctypes_types.TYPE.typ
      val char : char Ctypes_types.TYPE.typ
      val schar : int Ctypes_types.TYPE.typ
      val short : int Ctypes_types.TYPE.typ
      val int : int Ctypes_types.TYPE.typ
      val long : Signed.long Ctypes_types.TYPE.typ
      val llong : Signed.llong Ctypes_types.TYPE.typ
      val nativeint : nativeint Ctypes_types.TYPE.typ
      val int8_t : int Ctypes_types.TYPE.typ
      val int16_t : int Ctypes_types.TYPE.typ
      val int32_t : int32 Ctypes_types.TYPE.typ
      val int64_t : int64 Ctypes_types.TYPE.typ
      module Intptr : Signed.S
      val intptr_t : Intptr.t Ctypes_types.TYPE.typ
      module Ptrdiff : Signed.S
      val ptrdiff_t : Ptrdiff.t Ctypes_types.TYPE.typ
      val camlint : int Ctypes_types.TYPE.typ
      val uchar : Unsigned.uchar Ctypes_types.TYPE.typ
      val bool : bool Ctypes_types.TYPE.typ
      val uint8_t : Unsigned.uint8 Ctypes_types.TYPE.typ
      val uint16_t : Unsigned.uint16 Ctypes_types.TYPE.typ
      val uint32_t : Unsigned.uint32 Ctypes_types.TYPE.typ
      val uint64_t : Unsigned.uint64 Ctypes_types.TYPE.typ
      val size_t : Unsigned.size_t Ctypes_types.TYPE.typ
      val ushort : Unsigned.ushort Ctypes_types.TYPE.typ
      val sint : Signed.sint Ctypes_types.TYPE.typ
      val uint : Unsigned.uint Ctypes_types.TYPE.typ
      val ulong : Unsigned.ulong Ctypes_types.TYPE.typ
      val ullong : Unsigned.ullong Ctypes_types.TYPE.typ
      module Uintptr : Unsigned.S
      val uintptr_t : Uintptr.t Ctypes_types.TYPE.typ
      val float : float Ctypes_types.TYPE.typ
      val double : float Ctypes_types.TYPE.typ
      val ldouble : LDouble.t Ctypes_types.TYPE.typ
      val complex32 : Complex.t Ctypes_types.TYPE.typ
      val complex64 : Complex.t Ctypes_types.TYPE.typ
      val complexld : ComplexL.t Ctypes_types.TYPE.typ
      val ptr :
        'Ctypes_types.TYPE.typ ->
        'Ctypes_static.ptr Ctypes_types.TYPE.typ
      val ptr_opt :
        'Ctypes_types.TYPE.typ ->
        'Ctypes_static.ptr option Ctypes_types.TYPE.typ
      val string : string Ctypes_types.TYPE.typ
      val string_opt : string option Ctypes_types.TYPE.typ
      val ocaml_string : string Ctypes_static.ocaml Ctypes_types.TYPE.typ
      val ocaml_bytes : Bytes.t Ctypes_static.ocaml Ctypes_types.TYPE.typ
      val array :
        int ->
        'Ctypes_types.TYPE.typ ->
        'Ctypes_static.carray Ctypes_types.TYPE.typ
      val bigarray :
        < ba_repr : 'b; bigarray : 'bigarray; carray : 'c; dims : 'dims;
          element : 'a; layout : Bigarray.c_layout >
        Ctypes_static.bigarray_class ->
        'dims -> ('a, 'b) Bigarray.kind -> 'bigarray Ctypes_types.TYPE.typ
      val fortran_bigarray :
        < ba_repr : 'b; bigarray : 'bigarray; carray : 'c; dims : 'dims;
          element : 'a; layout : Bigarray.fortran_layout >
        Ctypes_static.bigarray_class ->
        'dims -> ('a, 'b) Bigarray.kind -> 'bigarray Ctypes_types.TYPE.typ
      val typ_of_bigarray_kind :
        ('a, 'b) Bigarray.kind -> 'Ctypes_types.TYPE.typ
      type ('a, 't) field
      val structure :
        string -> 'Ctypes_static.structure Ctypes_types.TYPE.typ
      val union : string -> 'Ctypes_static.union Ctypes_types.TYPE.typ
      val field :
        ('s, [< `Struct | `Union ] as 'b) Ctypes_static.structured
        Ctypes_types.TYPE.typ ->
        string ->
        'Ctypes_types.TYPE.typ ->
        ('a, ('s, 'b) Ctypes_static.structured) Ctypes_types.TYPE.field
      val seal :
        ('a, [< `Struct | `Union ]) Ctypes_static.structured
        Ctypes_types.TYPE.typ -> unit
      val view :
        ?format_typ:((Format.formatter -> unit) -> Format.formatter -> unit) ->
        ?format:(Format.formatter -> '-> unit) ->
        read:('-> 'b) ->
        write:('-> 'a) ->
        'Ctypes_types.TYPE.typ -> 'Ctypes_types.TYPE.typ
      val typedef :
        'Ctypes_types.TYPE.typ -> string -> 'Ctypes_types.TYPE.typ
      val abstract :
        name:string ->
        size:int ->
        alignment:int -> 'Ctypes_static.abstract Ctypes_types.TYPE.typ
      val lift_typ : 'Ctypes_static.typ -> 'Ctypes_types.TYPE.typ
      type 'a fn = 'Ctypes_static.fn
      val ( @-> ) :
        'Ctypes_types.TYPE.typ ->
        'Ctypes_types.TYPE.fn -> ('-> 'b) Ctypes_types.TYPE.fn
      val returning : 'Ctypes_types.TYPE.typ -> 'Ctypes_types.TYPE.fn
      type 'a static_funptr = 'Ctypes_static.static_funptr
      val static_funptr :
        'Ctypes_types.TYPE.fn ->
        'Ctypes_static.static_funptr Ctypes_types.TYPE.typ
    end
end