Haskell FFI – C结构数组数据字段

我正在为具有相当复杂接口的本机库处理
haskell绑定.它有很多结构作为其接口的一部分,我一直在使用hsc2hs和bindings-DSL包构建接口,以帮助自动化结构绑定.

但是,我遇到的一个问题是包含多维数组的结构.绑定-DSL documentation描述了用于绑定到类似结构的宏

struct with_array {
   char v[5];
   struct test *array_pointer;
   struct test proper_array[10];
};

像宏一样

#starttype struct with_array
#array_field v , CChar
#field array_pointer , Ptr <test>
#array_field proper_array , <test>
#stoptype

但是这个库有许多结构,多维数组作为字段,更像是

struct with_multidimensional_array {
   int whatever;
   struct something big_array[10][25][500];
};

#array_field宏似乎只处理数组的第一个维度.是不是绑定-DSL只是没有用于处理多维数组的宏?

我真的很喜欢用于将(可能是多维的)数组绑定到任意索引的StorableArray的宏.看起来像在DSL提供的宏绑定中可以获得必要的信息 – 这里没有宏.

有没有人添加宏到绑定-DSL?有没有人为绑定-DSD添加了一个宏?我是否已经超越了我应该用hsc2hs做的事情,还有一些其他工具可以帮助我以更简洁的方式做我想做的事情?

最佳答案 好吧,没有人提出任何其他内容,所以我会在评论中考虑这个想法.我将使用#field宏而不是#array_field宏,并指定一个包装StorableArray以使其正常工作的类型.

由于我正在考虑这个问题,我意识到可以使用GHC 7.6支持的新类型级数完全抽象出包装器.我把一个名为storable-static-array的包放在一起,它在类型级别上获取了维度,并提供了一个适当的Storable实例来处理本机数组,甚至是多维数组.

还有一件我还想要的东西,就是找到一种方法来编写一个绑定-DSL兼容的宏,它可以自动提取维度并负责正确生成它们.然而,简单地看一下绑定中的宏 – DSL,让我确信我自己并不知道管理它的程度.

点赞