我对 Haskell 中的 FFI 有一些疑问
- 我知道我必须使用语言编译指示,但是当我使用CPP 可以“更多”做什么时有什么
{-# LANGUAGE ForeignFunctionInterface #-}
区别{-# LANGUAGE CPP, ForeignFunctionInterface #-}
- 我在 c 中使用了一个使用 a 的函数,
struct
我该如何在 FFI 中处理这个? - 我什么时候必须用
CInt
,什么时候才用Int
?
CPP
语言扩展,您就可以合法地将 C 预处理器语法合并到您的 Haskell 程序中。Storable
为结构的每个字段定义peek
和poke
方法。hsc2hs工具可以提供帮助。CInt
每当您需要将 Haskell 传入或传出 C 时,您都可以使用Int
,因为这将确保进行任何所需的编组(同样适用于CDouble
,CString
依此类推)。X11 包有许多通过 FFI 定义和编组结构的示例。
更多信息在:
CPP
是 C 预处理器。它允许您使用条件编译和宏指令。通常,您不需要它,但是一旦您拥有依赖于平台的代码,它就会变得有用,其中要编译的代码由外部脚本决定(例如使用自动工具)。Cint
直接导入。编写高级绑定时,切换到Int
它不需要用户导入所需的库并且是 Haskell 标准