使用模板生成 FFI 调用 Haskell

Generate FFI call using Template Haskell

Frames library 中,有一个 readTable 函数,可以根据 CSV 文件生成记录类型。

是否可以生成类似 foreign import ccall unsafe "// c code" c_foo :: Int -> IO () 的调用?

我尝试使用 [d| ... |][t| ... |] 准引用来完成此操作,但在这两种情况下我都遇到了解析器错误。

是的,这是可能的。您看到的错误消息是由于 "// c code" 是 "Malformed entity string"。任何更理智的事情,你就可以参加比赛了:

ghci> :set -XTemplateHaskell
ghci> ffi = [d| foreign import ccall unsafe "foo" c_foo :: Int -> IO () |]

Here is an example which does pretty much exactly what you are asking about. Note that both the packages inline-c and inline-java靠这种东西