通过c2hsc和hsc2hs在Haskell中连接C联合

时间:2015-01-04 15:24:12

标签: haskell ffi hsc2hs c2hsc

虽然使用c2hschsc2hs为我节省了大量工作,但在尝试为C联盟创建绑定时遇到了一些麻烦。


例如,给定C结构

typedef struct {
      int tag;
      union {
            char a;
            double b;
      } v;
} sum_t;

c2hsc为我创建以下代码:

#starttype sum_t
#field tag , CInt
#field v , 
#stoptype

其中v字段为空。通过hsc2hs进一步向下进入工具链会产生错误的

data C'sum_t = C'sum_t{
  c'sum_t'tag :: CInt,
  c'sum_t'v :: 
}

现在的问题是

  1. 手动编写.hsc代码的正确方法是什么,以便我可以使用绑定?
  2. 有没有办法让c2hsc自动执行此操作?

1 个答案:

答案 0 :(得分:0)

c2hsc只生成bindings-dsl个宏。使用documentation there,您应该能够找出如何直接编写这些内容。考虑一下像......

#starttype struct sum_t
#field tag , CInt
#field v.a , CChar
#field v.b , CDouble
#stoptype

文档goes on to describe如何使用指针操作联合。