在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你可以讓這個答案,我可以接受它嗎? :) –