私はFFIをpdflibに書いています。 Pdflib C APIには、さまざまなハンドル(ドキュメント、ページ、イメージ、フォント)を返す、および/またはプレーンな整数(ポインタではない)として返す関数が多数あります。newtype Int - > CInt marshaller
newtype PdiDoc = PdiDoc Int
newtype PdiPage = PdiPage Int
newtype PdfImage = PdfImage Int
newtype PdfFont = PdfFont Int
今私は、これらのタイプのためのマーシャラーを提供する必要があります:私は誤って私がの形でnewtypesの束を作成する機能に間違ったのparamを渡さないようにするために
。
見てのとおり、マーシャラーはまったく同じで、種類が異なるだけです。
私の質問は、ある種の魔法、SYB vodooのトリックがあります。これらの型を整列させるための関数を1つだけ使うことができますか、あるいは同じ関数を何度も書き直して別のnewtypeを作成する必要がありますか?
編集:私の問題を解決したので、私はドンの答えを受け入れました。私は
GeneralizedNewtypeDeriving
に切り替え
は私のnewtypesのそれぞれに
deriving (Eq, Ord, Num, Enum, Real, Integral)
を追加し、そして今私はマーシャルにそれらのすべてを標準fromIntegralを使用することができます。
ネイサンハウエルの答えも正しいです、私はそれをupvoted。しかし残念なことに、彼のソリューションは、私が使用しているc2hsのようなFFIプリプロセッサをあきらめることを意味します。
おかげで、私はGeneralizedNewtypeDerivingをチェックします。私はc2hsを使用しています。そして、それは私が非組み込み型のためのマーシャラーを提供する必要があります。したがって、私の質問です。 –