api — вызов библиотеки Haskell из переполнения стека

Я создаю приложение в Qt (C++) которая использует библиотеку, написанную на Haskell, в качестве бэкэнда. Как я могу экспортировать интерфейс Haskell библиотека для C++?

Когда функции в библиотеке haskell используют простые типы, такие как int или же float это не проблема, но что, когда они используют структуры в качестве аргументов? Какое решение в этом случае является наиболее масштабируемым?

15

Решение

Вам нужно написать код на haskell, чтобы объединить эти структуры данных в те, которые вы можете использовать в Haskell. Инструмент c2hs очень полезен в этом отношении: http://hackage.haskell.org/package/c2hs

Пока инструмент появляется Предназначенный для вызова C из Haskell, он также очень полезен для противоположности в одном смысле — он позволяет маршалировать сложные типы C в типы Haskell. Поскольку предоставляемые вами функции должны будут принимать типы C (обычно указатели на сложные структуры), то вы можете A) создавать соответствующие структуры C и B) использовать функции, предоставляемые c2hs, чтобы затем маршалировать эти структуры в Haskell в ваших открытых функциях , так что вы можете работать с ними.

Также обратите внимание, что с инструментами, созданными в стиле c2hs, вам не нужно все маршалировать. Вы можете просто сгенерировать средства доступа, чтобы заглянуть в те части данных C, которые вам действительно нужны.

3

Другие решения

Поздно на вечеринку, но я думаю, что вы хотите использовать это:

Конкретно что-то вроде foreign export ccall foo :: Int -> IO Int, Который будет генерировать заголовок, такой как:

#include "HsFFI.h"extern HsInt foo(HsInt a0);

Смотрите ссылку для более подробной информации (например, как интегрировать в вашу программу C ++).

2

По вопросам рекламы [email protected]