Frames libraryには、CSVファイルに基づいてレコードタイプを生成するreadTable
関数があります。テンプレートHaskellを使用してFFIコールを生成
foreign import ccall unsafe "// c code" c_foo :: Int -> IO()
のようなコールを生成することはできますか。
私はそう[d| ... |]
と[t| ... |]
quasiquotersを使用して達成しようとしたが、両方で、私は、パーサーエラーが発生します。
Frames libraryには、CSVファイルに基づいてレコードタイプを生成するreadTable
関数があります。テンプレート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 code"はちょうど私がここに書いたプレースホルダでした。とにかく、本当に助けてくれてありがとう –
可能です。 '[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
@Alecあなたはこれを答えることができますので、私はそれを受け入れることができますか? :) –