我正在尝试编写 Haskell FFI 绑定到一些 C 结构体。以下是一个示例:
typedef struct s0{int a;
union{unsigned char b;
struct s0*c;
struct{unsigned char d[1];
}; };}*S;
我的问题是如何使用chs(用于c2hs)或hsc(用于hsc2hs)格式编写它的绑定?我查看了c2hs的教程,但要么没有足够的信息,要么就没有以帮助我编写上述定义的chs文件的方式理解它。
我可以使用HSFFIG工具生成Haskell绑定,但它使用自定义访问方法HSFFIG.FieldAccess.FieldAccess来定义绑定。我更喜欢编写使用核心Haskell FFI库而不是第三方库的绑定。
因此,这个问题是关于如何编写递归结构的绑定,该递归结构使用hsc格式或仅使用核心FFI库的chs格式。
实际的定义更加复杂,但一旦我弄清楚如何为c2hs或hsc2hs工具编写上述结构定义,我就可以从那里开始。我知道需要为内部联合和结构定义Storable实例,但我不知道如何为上面的递归定义编写包装器。特别地,如何从外部结构中访问结构/联合体内部?我查看了HSFFIG的定义,但访问方法是由HSFFIG定义的。因此,我无法弄清楚如何将其转换为仅使用核心FFI库的chs定义。
我在StackOverflow上看到的问题似乎是关于较简单定义的。如果有类似的答案,请指教。