2017-04-04 116 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代碼」只是一個我在這裏寫的地方持有人,無論如何,謝謝你的答案,它真的幫助我:) –