从C++调用Haskell库

rem*_*ezx 16 c++ api haskell interface ffi

我在Qt(C++)中构建一个应用程序,它使用在Haskell中编写的库作为后端.如何将Haskell库的界面导出到C++

当haskell库中的函数使用简单类型时,int或者float它不是问题,但当它们使用结构作为参数时会是什么?这种情况下最具可扩展性的解决方案是什么?

scl*_*clv 3

您需要编写 Haskell 代码来将这些数据结构编组为可以在 Haskell 中使用的数据结构。c2hs 工具在这方面非常有帮助:http://hackage.haskell.org/package/c2hs

虽然该工具似乎是为从 Haskell 调用 C 语言而设计的,但从某种意义上来说,它也非常有用——它允许您将复杂的 C 类型编组为 Haskell 类型。由于您公开的函数需要采用 C 类型(通常是指向复杂结构的指针),因此您可以 A) 构造适当的 C 结构,B) 使用 c2hs 提供的功能,以便在您公开的函数中将这些结构编组到 Haskell 中,以便您可以与他们一起工作。

另请注意,使用 c2hs 风格生成的工具,您不需要编组所有内容。您只需生成访问器即可查看您真正关心的 C 数据结构部分。

  • 嗯,实际上,他想生成 C 头文件/包装以从 C++ 代码调用 haskell 函数。不编写 C++ 代码的 haskell 绑定。我想你已经读过相反的内容了。 (2认同)
  • C 无法访问 Haskell 数据结构,因为它们包含 thunk 等,因此通常与运行时相关。这意味着你的 Haskell 必然需要一个包装层,让它以某种方式与 c 结构交互。如果没有更多关于你想做什么的细节,这是我能给出的最好建议。对于更具体的问题,我可以提供更多指导。 (2认同)