2012-01-11 11 views
1

最近augeasがlibmxl2から型にxmlNodeとパラメータを含むaug_to_xml methodを添加http://hackage.haskell.org/package/augeasHaskellのFFI間相互依存関係が

でaugeasのFFIライブラリを維持します。 libxmlはlibxml2用のFFIライブラリですが、しばらくのうちに更新されておらず、Debianパッケージがないと思われますので、augeas FFIライブラリへの依存として追加することを躊躇しています。

私はこの機能のFFIサポートを追加するときに、libxmlに依存性を追加する方が良いでしょう。後でパッケージ化の問題につながる可能性がありますか、それともopaque type FFIの料理の本はないので、図書館間の依存関係はありませんか?

私は不透明型のアプローチを使い、ユーザーは自分自身でlibxmlを使いたいと思っている場合、自分のタイプをText.XML.LibXML.Nodeとしてキャストすることができますか?

+0

libxmlの最終アップロードは3年半前です。放棄されたプロジェクトかもしれません。それを依存関係として追加する前に、メンテナに確認してください。 –

答えて

1

関数を含める場合は、不透明な型がおそらく最適なルートですが、安全ではない型変換でのみ使用できる関数を別のライブラリの型に含めることには懐疑的です(実際は可能でしょうしかし、libxmlバインディングの内部表現(Nodeは変更しないでください - 危険です)に依存します。

私は単に関数を追加しないことをお勧めします。もし誰かがそれを使いたければ簡単にそれをインポートすることができ、あなたのバインディングが適切であれば、おそらくあなたのバインディングのタイプでそれを使うのは簡単でしょう。もちろん、一般的に使用される可能性が高い場合は、これをパッケージにまとめて簡単にバンドルすることができますが、2008年に最後に更新されたパッケージを疑いますが、GHC 6.12以降でビルドしていないパッケージについては、多くの使用。

したがって、私はあなたのバインディングから関数を省略するか、本当に含める場合は不透明な型を使用します。

+0

私はtween =彼は完全に(私はAPIの機能を残したくない)ために、主に不透明な型です。 http://stackoverflow.com/questions/4794644/storable-empty-data-declarationがかなり役に立ちました。 EmptyDataDeclsを使用して、XmlNodeを、http://www.haskell.org/haskellwiki/FFICookBook#Working_with_structsのように、整列とサイズが一致する格納可能なインスタンスとして定義しました – pwan