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