Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我能够通过包含标准数据类型的 FFI 导出简单的 haskell 函数。但是,我不知道如何导出采用标准数据类型以外的数据类型的函数。
例如
data SomeType a = SomeType a data SomeOtherType b = SomeOtherType b doSomething:: SomeType a -> SomeOtherType b
如何导出函数 doSomething?
现有文件讨论了非常简单的示例。
另一种方法是解除函数以使用StablePtr,并使用StablePtr 导出函数。当然,正如上述答案中所指出的,您已经使用了带有导出实例的函数。
使用 H/Direct 之类的东西将这段代码插入到 c++ 对象中,这样它就可以作为对象进行访问。
简短的回答是,你不能。
您需要选择该函数的一个实例并将其导出。
例如doSomething :: SomeType Int -> SomeOtherType Int是可出口的。我在这里写了一个更长的答案,可能会有所帮助
doSomething :: SomeType Int -> SomeOtherType Int
原因是 Haskell 端需要知道如何编组结构、分配多少内存等。