2011-04-21 38 views
1

正如您所知道的,对于C中的任何标识符ident,您可以编写&ident以获取指向ident的内存位置(指针),而不管该位置是否在堆或堆栈上。在使用C类型时,通常有助于访问此功能。Haskell的Foreign.C相当于C的&符号运算符(&)

FFI中Haskell中是否存在等价操作?

+3

想想你拥有的每一个外国参考指标。你已经有他们的地址。除非你询问地址的地址,在这种情况下,Haskell不能像C那样工作,以至于不能支持(Haskell保留移动数据的权利 - 而且GHC的确有很多) – luqui 2011-04-21 01:07:44

+3

也许你应该提出更高层次的问题。你想达到什么目的? – 2011-04-21 02:22:54

+0

我正在玩OpenCLRaw,并试图编译(链接*似乎*工作正常)。 – fatuhoku 2011-04-21 10:42:41

回答

2

如果您有要导入到Haskell这样的C标识符,您可以通过“&”语法转换为指针,地址FFI declarations,像这样:

foreign import ccall "&" bar :: Ptr CInt 

通常,这是相当这是一件难得的事情,因为你导入的几乎所有东西都已经是一个指针了。

通过使用stable pointers,Haskell值本身也可以变成指针,以确保它们不受垃圾回收器影响。