2017-04-04 53 views
0

Frames library中,有一个readTable函数,该函数根据CSV文件生成记录类型。使用模板Haskell生成FFI呼叫

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

我试图完成如此使用[d| ... |][t| ... |] quasiquoters,但在我得到一个解析器错误。

+5

这是可能的。 '研究[D |例如,外部导入ccall不安全的“malloc”c_malloc :: Int - > IO()|]'。有一些FFI模板Haskell的例子[这里](https://wiki.haskell.org/Foreign_Function_Interface#Inline_FFI_calls)。还要注意,这正是[inline-c](https://hackage.haskell.org/package/inline-c)和[inline-java](https://hackage.haskell.org/package/inline- java)依靠。 – Alec

+0

@Alec你可以让这个答案,我可以接受它吗? :) –

回答

1

是的,这是可能的。您看到的错误消息是由于"// c code"是一个“格式错误的实体字符串”。再说了理智,你是去比赛:

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

Here是做几乎你问到底是什么一个例子。请注意,包inline-cinline-java都依赖于这种事情。

+0

“// C代码”只是一个我在这里写的地方持有人,无论如何,谢谢你的答案,它真的帮助我:) –