@@ -57,15 +57,13 @@ instance (Monoid w) => MonadIO (Logger w) where
5757 liftIO = Logger . const
5858
5959instance (Monoid w) => MonadWriter w (Logger w) where
60− tell w = Logger $ \r -> modifyIORef' r (mappend w)
60+ tell w = Logger $ \r -> atomicModifyIORef' r $ \w' -> (mappend w' w, ())
6161 listen l = Logger $ \r -> do
6262 (a, w) <- liftIO (runLogger' l)
63− modifyIORef' r (mappend w)
64− return (a, w)
63+ atomicModifyIORef' r $ \w' -> (mappend w' w, (a, w))
6564 pass l = Logger $ \r -> do
6665 ((a, f), w) <- liftIO (runLogger' l)
67− modifyIORef' r (mappend (f w))
68− return a
66+ atomicModifyIORef' r $ \w' -> (mappend w' (f w), a)
6967
7068instance (Monoid w) => MonadBase IO (Logger w) where
7169 liftBase = liftIO