使用Template Haskell生成FFI调用

时间:2017-04-04 08:01:40

标签: haskell template-haskell haskell-frames

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

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

我尝试使用[d| ... |][t| ... |] quasiquoters完成此操作,但在两者中我都遇到了解析器错误。

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。您看到的错误消息是由于"// c code"是“格式错误的实体字符串”。任何更健全的东西,你都参加了比赛:

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

Here就是一个例子,它几乎完全符合你的要求。请注意,包inline-cinline-java都依赖于此类内容。