如何通过FFI从包含数据类型的haskell导出函数

时间:2012-08-29 23:20:14

标签: haskell ffi

我能够通过包含标准数据类型的FFI导出简单的haskell函数。但是,我不知道如何导出采用标准数据类型以外的数据类型的函数。

E.g。

data SomeType a = SomeType a
data SomeOtherType b = SomeOtherType b

doSomething:: SomeType a -> SomeOtherType b

如何导出功能doSomething?

现有文件谈到了非常简单的例子。

2 个答案:

答案 0 :(得分:2)

另一种方法是将函数提升为使用StablePtr,并使用StablePtr导出函数。当然,正如上面的答案所指出的那样,你可以使用带有cane导出实例的函数。

使用像H / Direct这样的代码将这些代码转换为c ++对象,以便可以作为对象进行访问,这将是很棒的。

答案 1 :(得分:1)

简短回答是you can't

您需要选择该功能的实例并将其导出。

e.g。 doSomething :: SomeType Int -> SomeOtherType Int可导出。我写了一篇较长的答案here,可能会有所帮助

原因是Haskell方需要知道如何编组结构,分配多少内存等。