私の Haskell プログラムには、多くのコンストラクターを持つ ADT があります。
data MyData = Con1 |
Con2 |
...
Con20
の配列にforeign export ccall
ラップする関数があります。それを呼び出した後、各要素の構築に使用されたコンストラクターを特定する必要があります。[MyData]
StablePtr's
この方法で解決できました
foreign export ccall getType :: StablePtr MyData -> IO CInt
getType (Con1) = return 1
getType (Con2) = return 2
...
しかし、Cヘッダーでこれらの定数を手動で定義する必要があります。これはエラーが発生しやすいので、GHC にこの仕事をさせる方法はないかと考えています。