5

標準データ型を含む FFI を介して単純な haskell 関数をエクスポートできます。ただし、標準データ型以外のデータ型を取る関数をエクスポートする方法がわかりません。

例えば

data SomeType a = SomeType a
data SomeOtherType b = SomeOtherType b

doSomething:: SomeType a -> SomeOtherType b

関数 doSomething をエクスポートするにはどうすればよいですか?

既存のドキュメントでは、非常に単純な例について説明しています。

4

2 に答える 2

2

別の方法として、StablePtr を使用するように関数をリフトし、StablePtr を使用して関数をエクスポートします。もちろん、上記の回答で指摘したように、エクスポートできるインスタンスで関数を使用しています。

オブジェクトとしてアクセスできるように、H/Direct のようなものを使用してこのコードを c++ オブジェクトに組み込むとよいでしょう。

于 2012-08-30T15:59:03.583 に答える
1

簡単に言えば、できません

関数のインスタンスを選択してエクスポートする必要があります。

たとえばdoSomething :: SomeType Int -> SomeOtherType Int、エクスポート可能です。ここに役立つかもしれない長い回答を書きました

その理由は、Haskell 側が構造体をマーシャリングする方法、割り当てるメモリの量などを知る必要があるためです。

于 2012-08-30T10:03:57.223 に答える