From 71b25eb0fa0f13045d1c8d801ee41231c7d1e4d2 Mon Sep 17 00:00:00 2001 From: Jon Kristensen Date: Sat, 17 Nov 2012 01:14:56 +0100 Subject: [PATCH] borrowed modifyTVar for GHC 7.0 compatibility --- source/Network/Xmpp/Concurrent/Monad.hs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/Network/Xmpp/Concurrent/Monad.hs b/source/Network/Xmpp/Concurrent/Monad.hs index 6a3de26..29c1019 100644 --- a/source/Network/Xmpp/Concurrent/Monad.hs +++ b/source/Network/Xmpp/Concurrent/Monad.hs @@ -6,6 +6,7 @@ import Network.Xmpp.Types import Control.Applicative((<$>)) import Control.Concurrent import Control.Concurrent.STM +import Control.Concurrent.STM.TVar (TVar, readTVar, writeTVar) import qualified Control.Exception.Lifted as Ex import Control.Monad.IO.Class import Control.Monad.Reader @@ -205,6 +206,14 @@ sendMessage m session = sendStanza (MessageS m) session -- | Executes a function to update the event handlers. modifyHandlers :: (EventHandlers -> EventHandlers) -> Session -> IO () modifyHandlers f session = atomically $ modifyTVar (eventHandlers session) f + where + -- Borrowing modifyTVar from + -- http://hackage.haskell.org/packages/archive/stm/2.4/doc/html/src/Control-Concurrent-STM-TVar.html + -- as it's not available in GHC 7.0. + modifyTVar :: TVar a -> (a -> a) -> STM () + modifyTVar var f = do + x <- readTVar var + writeTVar var (f x) -- | Sets the handler to be executed when the server connection is closed. setConnectionClosedHandler :: (StreamError -> Session -> IO ()) -> Session -> IO ()