【发布时间】:2013-10-16 00:14:43
【问题描述】:
我有一个用 C 语言编写的函数,我想从 Haskell 程序中调用。函数类型为:
foo :: Int -> Ptr a -> IO ()
它需要一个大小和一个指针,然后把整个东西放在内存中的某个地方。它旨在与混合类型一起使用。你可以放 n 个浮点数,然后是 m 个 bools 等等(在 C 中)。
在 Haskell 中表示这种情况的最方便的方法是——在我看来——例如 ([a],[b])。但是,我需要将整个内容放入 Ptr a 中(它实际上是 C 中的 void*)。我可以尝试编写像([a],[b]) -> Ptr c 这样的函数,但我需要一些帮助。所需的最终功能是:
withArrayLen magicArray foo
【问题讨论】:
-
读取外部函数接口以及如何为数据类型编写可存储实例。