Я создаю приложение в Qt
(C++
) которая использует библиотеку, написанную на Haskell, в качестве бэкэнда. Как я могу экспортировать интерфейс Haskell
библиотека для C++
?
Когда функции в библиотеке haskell используют простые типы, такие как int
или же float
это не проблема, но что, когда они используют структуры в качестве аргументов? Какое решение в этом случае является наиболее масштабируемым?
Вам нужно написать код на haskell, чтобы объединить эти структуры данных в те, которые вы можете использовать в Haskell. Инструмент c2hs очень полезен в этом отношении: http://hackage.haskell.org/package/c2hs
Пока инструмент появляется Предназначенный для вызова C из Haskell, он также очень полезен для противоположности в одном смысле — он позволяет маршалировать сложные типы C в типы Haskell. Поскольку предоставляемые вами функции должны будут принимать типы C (обычно указатели на сложные структуры), то вы можете A) создавать соответствующие структуры C и B) использовать функции, предоставляемые c2hs, чтобы затем маршалировать эти структуры в Haskell в ваших открытых функциях , так что вы можете работать с ними.
Также обратите внимание, что с инструментами, созданными в стиле c2hs, вам не нужно все маршалировать. Вы можете просто сгенерировать средства доступа, чтобы заглянуть в те части данных C, которые вам действительно нужны.
Поздно на вечеринку, но я думаю, что вы хотите использовать это:
Конкретно что-то вроде foreign export ccall foo :: Int -> IO Int
, Который будет генерировать заголовок, такой как:
#include "HsFFI.h"extern HsInt foo(HsInt a0);
Смотрите ссылку для более подробной информации (например, как интегрировать в вашу программу C ++).