sig
  type 'a fn
  type 'a return
  val ( @-> ) :
    'a typ -> 'b Ctypes.FOREIGN.fn -> ('a -> 'b) Ctypes.FOREIGN.fn
  val returning : 'a typ -> 'a Ctypes.FOREIGN.return Ctypes.FOREIGN.fn
  type 'a result
  val foreign :
    string ->
    ('a -> 'b) Ctypes.FOREIGN.fn -> ('a -> 'b) Ctypes.FOREIGN.result
  val foreign_value : string -> 'a typ -> 'a Ctypes.ptr Ctypes.FOREIGN.result
end