Интерфейсные союзы 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 ::
}
Вопросы сейчас
- Как правильно написать
.hsc
код вручную, чтобы я мог работать с привязками? - Есть ли способ, которым я могу сделать
c2hsc
сделать это автоматически?
1 ответ
c2hsc
просто генерирует bindings-dsl
макросы. Используя там документацию, вы сможете понять, как написать их напрямую. Рассмотрим что-то вроде...
#starttype struct sum_t
#field tag , CInt
#field v.a , CChar
#field v.b , CDouble
#stoptype
В документации описывается, как манипулировать профсоюзами с помощью указателей.