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