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