- things are not exception-safe right now
- new api based on something like:

	mkFun :: Fun a -> IO a

	argBool :: Fun a -> Fun (Bool -> a)
	argInt  :: Fun a -> Fun (Int -> a)

	retBool :: Fun (IO Bool)
	retInt  :: Fun (IO Int)

	mkFun (argInt . argInt $ retBool) :: IO (Int -> Int -> IO Bool)

	Then, mkFun would call ffi_prep_cif, and the function it returns would call ffi_call,
	which could be much more efficient.
	However, I don't currently see how to implement mkFun without the function it returns
	having to traverse the Fun GADT on each call.
