From 7bcfa0ee8e84cf1116d277d954772d0df46ee728 Mon Sep 17 00:00:00 2001
From: Jens Nolte <git@queezle.net>
Date: Wed, 7 Oct 2020 16:33:44 +0200
Subject: [PATCH] Implement Disposable

---
 src/lib/Qd/Observable.hs | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/lib/Qd/Observable.hs b/src/lib/Qd/Observable.hs
index 2063bed..c784cec 100644
--- a/src/lib/Qd/Observable.hs
+++ b/src/lib/Qd/Observable.hs
@@ -6,6 +6,7 @@ module Qd.Observable (
   subscribe',
   SubscriptionHandle(..),
   RegistrationHandle(..),
+  Disposable(..),
   ObservableCallback,
   ObservableState,
   ObservableMessage,
@@ -38,6 +39,13 @@ mapObservableMessage f (r, s) = (r, ) <$> f s
 newtype SubscriptionHandle = SubscriptionHandle { unsubscribe :: IO () }
 newtype RegistrationHandle = RegistrationHandle { deregister :: IO () }
 
+class Disposable a where
+  dispose :: a -> IO ()
+instance Disposable SubscriptionHandle where
+  dispose = unsubscribe
+instance Disposable RegistrationHandle where
+  dispose = deregister
+
 class Observable v o | o -> v where
   getValue :: o -> IO (ObservableState v)
   subscribe :: o -> (ObservableMessage v -> IO ()) -> IO SubscriptionHandle
-- 
GitLab