From 28d861e2df3a70ed4a13015758ad6b30cf24f997 Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Sun, 11 Oct 2020 00:08:16 +0200 Subject: [PATCH] Replace Updateable with Settable class --- src/lib/Qd/Observable.hs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/lib/Qd/Observable.hs b/src/lib/Qd/Observable.hs index c784cec..ed9dafb 100644 --- a/src/lib/Qd/Observable.hs +++ b/src/lib/Qd/Observable.hs @@ -6,6 +6,7 @@ module Qd.Observable ( subscribe', SubscriptionHandle(..), RegistrationHandle(..), + Settable(..), Disposable(..), ObservableCallback, ObservableState, @@ -72,6 +73,10 @@ instance Observable v o => Observable v (IO o) where subscribe observable callback +class Settable v a where + setValue :: a -> v -> IO () + + -- | Existential quantification wrapper for the Observable type class. data SomeObservable v = forall o. Observable v o => SomeObservable o instance Observable v (SomeObservable v) where @@ -105,6 +110,10 @@ instance Observable v (BasicObservable v) where unsubscribe' :: Unique -> IO () unsubscribe' key = modifyMVar_ mvar $ \(state, subscribers) -> return (state, HM.delete key subscribers) +instance Settable v (BasicObservable v) where + setValue basicObservable = setBasicObservable basicObservable . Just + + createBasicObservable :: Maybe v -> IO (BasicObservable v) createBasicObservable defaultValue = do BasicObservable <$> newMVar (defaultValue, HM.empty) -- GitLab