При использовании c2hsc
и hsc2hs
сэкономит мне много работы, я столкнулся с некоторыми проблемами при попытке создания привязок для C-соединений.Взаимодействие с C-соединениями в Haskell через c2hsc и hsc2hs
Например, учитывая структуру 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
сделать это автоматически?
Учитывая, что кодовая база 'hsc2hs' вообще не упоминает о союзах, я подозреваю, что она не реализована. Кроме того, союзы по своей сути являются небезопасными, поэтому неясно, как можно перевести их в алгебраические типы данных. Чтобы сделать это безопасно, нужен также дискриминатор, который является сущностью вне союза. – Rufflewind
Лучше всего будет написать функции для создания и управления ими в C самостоятельно, а затем использовать их со стороны Haskell. Но я ничего не знаю о FFI. – dfeuer