Something to keep in mind if we decide to really try to type check ffi definitions: I like to do the following: val pi = _ffi "printf": (string * int -> int); val ps = _ffi "printf": (string * string -> int); I don't know the best way of checking these sorts of declarations.