diff --git a/src/lib/Qd/Observable/ObservableMap.hs b/src/lib/Qd/Observable/ObservableMap.hs index 52bb5ef7e924db105c211bfce0bdc14c2cbfde9b..2eb8adbb1f0a6c236888299cf06cb13d97f403ba 100644 --- a/src/lib/Qd/Observable/ObservableMap.hs +++ b/src/lib/Qd/Observable/ObservableMap.hs @@ -10,10 +10,9 @@ module Qd.Observable.ObservableMap ( ) where import Qd.Observable +import Qd.Utils.GetT import Control.Concurrent.MVar -import Data.Bifunctor -import Data.Hashable (Hashable) import qualified Data.HashMap.Strict as HM import Data.Unique import Prelude hiding (lookup, lookupDelete) @@ -25,14 +24,6 @@ data ObservableValue v = ObservableValue { subscribers :: (HM.HashMap Unique (ObservableMessage v -> IO ())) } -newtype GetT s m r = GetT { - runGetT :: m (r, s) -} -instance Functor m => Functor (GetT s m) where - fmap :: (a -> b) -> (GetT s m) a -> (GetT s m) b - fmap fn = GetT . fmap (first fn) . runGetT - - modifyValue :: forall k v a. (Eq k, Hashable k) => (ObservableValue v -> IO (ObservableValue v, a)) -> k -> ObservableMap k v -> IO a modifyValue f k (ObservableMap mvar) = modifyMVar mvar $ \hashmap -> runGetT (HM.alterF update k hashmap) where