2011-04-21 72 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值本身也可以變成指針,以確保它們不受垃圾回收器影響。