, InteractionQueue
, newInteractionQueue -- IO InteractionQueue
, newInteraction -- HostName -> Maybe Request -> IO Interaction
+
+ , writeItr -- Interaction -> (Interaction -> TVar a) -> a -> STM ()
+ , readItr -- Interaction -> (Interaction -> TVar a) -> (a -> b) -> STM b
+ , readItrF -- (Functor f) => Interaction -> (Interaction -> TVar (f a)) -> (a -> b) -> STM (f b)
+ , updateItr -- Interaction -> (Interaction -> TVar a) -> (a -> a) -> STM ()
+ , updateItrF -- (Functor f) => Interaction -> (Interaction -> TVar (f a)) -> (a -> a) -> STM ()
)
where
, itrWroteContinue = wroteContinue
, itrWroteHeader = wroteHeader
}
+
+
+writeItr :: Interaction -> (Interaction -> TVar a) -> a -> STM ()
+writeItr itr accessor value
+ = writeTVar (accessor itr) value
+
+
+readItr :: Interaction -> (Interaction -> TVar a) -> (a -> b) -> STM b
+readItr itr accessor reader
+ = readTVar (accessor itr) >>= return . reader
+
+
+readItrF :: (Functor f) => Interaction -> (Interaction -> TVar (f a)) -> (a -> b) -> STM (f b)
+readItrF itr accessor reader
+ = readItr itr accessor (fmap reader)
+
+
+updateItr :: Interaction -> (Interaction -> TVar a) -> (a -> a) -> STM ()
+updateItr itr accessor updator
+ = do old <- readItr itr accessor id
+ writeItr itr accessor (updator old)
+
+
+updateItrF :: (Functor f) => Interaction -> (Interaction -> TVar (f a)) -> (a -> a) -> STM ()
+updateItrF itr accessor updator
+ = updateItr itr accessor (fmap updator)