From 3425bb0e8e73175ece9fce873fdc406b48a0ae0e Mon Sep 17 00:00:00 2001 From: Jens Nolte Date: Sun, 18 Feb 2024 21:29:19 +0100 Subject: [PATCH] quasar: Add Eq and Hashable instances for DisposableVar --- quasar/src/Quasar/Resources/DisposableVar.hs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/quasar/src/Quasar/Resources/DisposableVar.hs b/quasar/src/Quasar/Resources/DisposableVar.hs index 45cec6e..7149cd3 100644 --- a/quasar/src/Quasar/Resources/DisposableVar.hs +++ b/quasar/src/Quasar/Resources/DisposableVar.hs @@ -12,6 +12,7 @@ module Quasar.Resources.DisposableVar ( ) where import Control.Monad.Catch +import Data.Hashable (Hashable(..)) import Quasar.Future (Future, ToFuture(..), IsFuture(..)) import Quasar.Prelude import Quasar.Resources.Disposer @@ -38,6 +39,13 @@ instance IsDisposerElement (DisposableVar a) where instance Disposable (DisposableVar a) where getDisposer x = mkDisposer [x] +instance Eq (DisposableVar a) where + (DisposableVar x _) == (DisposableVar y _) = x == y + +instance Hashable (DisposableVar a) where + hash (DisposableVar key _) = hash key + hashWithSalt salt (DisposableVar key _) = hashWithSalt salt key + wrapDisposeException :: MonadCatch m => m a -> m a wrapDisposeException fn = fn `catchAll` \ex -> throwM (DisposeException ex) @@ -104,6 +112,14 @@ instance IsFuture () (TDisposableVar a) where TDisposableVarDisposing callbackRegistry -> Left <$> registerCallback callbackRegistry callback TDisposableVarAlive _ _ callbackRegistry -> Left <$> registerCallback callbackRegistry callback + +instance Eq (TDisposableVar a) where + (TDisposableVar x _) == (TDisposableVar y _) = x == y + +instance Hashable (TDisposableVar a) where + hash (TDisposableVar key _) = hash key + hashWithSalt salt (TDisposableVar key _) = hashWithSalt salt key + newTDisposableVar :: MonadSTMc NoRetry '[] m => a -> (a -> STMc NoRetry '[] ()) -> m (TDisposableVar a) newTDisposableVar content disposeFn = liftSTMc do key <- newUniqueSTM