Интерфейсные союзы C в Haskell через c2hsc и hsc2hs

При использовании c2hsc а также hsc2hs экономит мне много работы, я столкнулся с некоторыми проблемами при попытке создать привязки для профсоюзов 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 ответ

c2hsc просто генерирует bindings-dsl макросы. Используя там документацию, вы сможете понять, как написать их напрямую. Рассмотрим что-то вроде...

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

В документации описывается, как манипулировать профсоюзами с помощью указателей.

Другие вопросы по тегам