2017-05-24 26 views

回答

2

免責聲明:雖然我是一個Haskell專家,我知之甚少哈斯克爾-GI明確。這就是說......

在文件來看,我們有:

newtype Widget = Widget (ManagedPtr Widget) 
data ManagedPtr a = ManagedPtr { 
    managedForeignPtr :: ForeignPtr a 
    , managedPtrIsOwned :: IORef Bool 
    } 

所有適當的構造出口,都ForeignPtrIORef報價Eq實例。因此編寫我們自己的Eq實例應該是微不足道的 - 編譯器本身應該能夠做到這一點。

{-# LANGUAGE StandaloneDeriving #-} 

deriving instance Eq (ManagedPtr a) 
deriving instance Eq Widget 

這是否有正確的語義是不是100%我清楚;它可能是你想忽略你的相等測試的目的,在這種情況下,你可能會想要寫

instance Eq (ManagedPtr a) where 
    (==) ManagedPtr { managedForeignPtr = p } 
     ManagedPtr { managedForeignPtr = p' } 
     = p == p' 

或類似的,而不是所有權。

+0

哦,太棒了!非常感謝! – Arthur

相關問題