在Frames library中,有一个readTable
函数,该函数根据CSV文件生成记录类型。使用模板Haskell生成FFI呼叫
是否可以生成类似foreign import ccall unsafe "// c code" c_foo :: Int -> IO()
的电话?
我试图完成如此使用[d| ... |]
和[t| ... |]
quasiquoters,但在我得到一个解析器错误。
在Frames library中,有一个readTable
函数,该函数根据CSV文件生成记录类型。使用模板Haskell生成FFI呼叫
是否可以生成类似foreign import ccall unsafe "// c code" c_foo :: Int -> IO()
的电话?
我试图完成如此使用[d| ... |]
和[t| ... |]
quasiquoters,但在我得到一个解析器错误。
是的,这是可能的。您看到的错误消息是由于"// c code"
是一个“格式错误的实体字符串”。再说了理智,你是去比赛:
ghci> :set -XTemplateHaskell
ghci> ffi = [d| foreign import ccall unsafe "foo" c_foo :: Int -> IO() |]
Here是做几乎你问到底是什么一个例子。请注意,包inline-c和inline-java都依赖于这种事情。
“// C代码”只是一个我在这里写的地方持有人,无论如何,谢谢你的答案,它真的帮助我:) –
这是可能的。 '研究[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
@Alec你可以让这个答案,我可以接受它吗? :) –