1
Gtk2Hsではgtkオブジェクトを==
と比較して、それらが同じかどうかを調べることができました。例:2つのオブジェクトをhaskell-giと比較して、それらが同じかどうか調べることは可能ですか?
ここで、State
は、別のVBoxのデータ型コンテナです。
私は気づいたhaskell-gi
のウィジェットはEq
から派生していません。オブジェクトを比較する別の方法はありますか?
Gtk2Hsではgtkオブジェクトを==
と比較して、それらが同じかどうかを調べることができました。例:2つのオブジェクトをhaskell-giと比較して、それらが同じかどうか調べることは可能ですか?
ここで、State
は、別のVBoxのデータ型コンテナです。
私は気づいたhaskell-gi
のウィジェットはEq
から派生していません。オブジェクトを比較する別の方法はありますか?
免責事項:私はHaskellの専門家ですが、私は特にhaskell-giについてはほとんど知りません。
newtype Widget = Widget (ManagedPtr Widget)
data ManagedPtr a = ManagedPtr {
managedForeignPtr :: ForeignPtr a
, managedPtrIsOwned :: IORef Bool
}
すべての適切なコンストラクタが輸出され、そして両方ForeignPtr
とIORef
提供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'
または類似を書きたいかもしれません、その場合、あなたの平等のテストの目的のために所有権を無視するということが可能です。
これは素晴らしいです!どうもありがとう! – Arthur