diff --git a/src/lib/Qd/Observable.hs b/src/lib/Qd/Observable.hs index 2063bed4b1032e6016e8ee0e2797ed3d52e0f541..c784cecc79bab973e567636afacda4b89e3feaf7 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