2017-04-04 4 views
0

Frames libraryには、CSVファイルに基づいてレコードタイプを生成するreadTable関数があります。テンプレートHaskellを使用してFFIコールを生成

foreign import ccall unsafe "// c code" c_foo :: Int -> IO()のようなコールを生成することはできますか。

私はそう[d| ... |][t| ... |] quasiquotersを使用して達成しようとしたが、両方で、私は、パーサーエラーが発生します。

+5

可能です。 '[d |外部インポートccall unsafe "malloc" c_malloc :: Int - > IO()|] 'などが動作します。 FFI [here](https://wiki.haskell.org/Foreign_Function_Interface#Inline_FFI_calls)のテンプレートHaskellの例がいくつかあります。また、これはまさに[inline-c](https://hackage.haskell.org/package/inline-c)と[inline-java](https://hackage.haskell.org/package/inline-c) 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 code"はちょうど私がここに書いたプレースホルダでした。とにかく、本当に助けてくれてありがとう –

関連する問題