Я работаю над библиотекой C (libpandoc), которая использует некоторую работу с библиотекой haskell (pandoc). Библиотека C предоставляет обратные вызовы оболочки haskell для чтения и записи данных. Обычно с обратными вызовами я также хотел бы отправить void *user_data
, чтобы обратные вызовы не должны были зависеть от глобальных переменных.
Однако в Интернете я не могу понять, как передать переменную Haskell a void *
.
Существует CString, который является char *
(и может в конечном итоге использоваться как обходной путь, но это не так приятно) и общий Ptr, который делает указатели из вещей. Однако эти вещи, похоже, не включают void
(что также понятно). Глядя на Foreign.C Я не вижу ничего полезного.
Мой вопрос: какой тип я могу использовать для передачи такой функции в Haskell?
int func(char *buffer, void *user_data);
...
that_haskell_function(..., func, my_data);