Я широко использую это, компилируя общие файлы haskell, которые вызывается за пределами Haskell.
обычно задачи, связанные бы
- создать соответствующие внешние декларации экспорта
- создать Storable экземпляров для любых типов данных, которые необходимо мобилизовывать
- создавать структуры C (или структуры в языке я использую), чтобы прочитать эту информацию
- , так как я не хочу вручную инициализировать RTS haskell, я добавляю код инициализации/завершения в сам lib. (dllmain в windows __attribute__ ((конструктор)) на unix)
- Поскольку я больше не нуждаюсь ни в одном из них, я создаю файл .def, чтобы скрыть все функции закрытия и rts из таблицы экспорта (windows)
- использовать GHC, чтобы скомпилировать все вместе
Эти задачи довольно роботизированы и структурированы, и вы можете написать что-нибудь, чтобы их автоматизировать. Infact, что я использую для этого, - это инструмент, который я создал, который выполняет трассировку зависимостей над функциями, которые вы отметили для экспорта, и он будет их завершать и компилировать совместно используемую библиотеку для вас вместе с предоставлением вам объявлений в C/C++.
(к сожалению, этот инструмент не на hackage, потому что есть что-то мне еще нужно исправить и проверить намного больше, прежде чем я комфортно делать это)
Инструмент доступен здесь http://hackage.haskell.org/package/Hs2lib-0.4.8
http://mldonkey.sourceforge.net/Main_Page – grettke
http://coherentpdf.com/blog/?tag=ocaml – grettke
Caveat (http://www-list.cea.fr/labos/gb/LSL/ caveat/index.html) является инструментом проверки для критического встроенного C, написанного в основном на C++, но который использует OCaml в качестве языка сценариев (журнал Caml, созданный во время интерактивного сеанса, может быть скомпилирован и связан с Caveat, который будет воспроизведен в любое время) , –