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