@@ -57,15 +57,13 @@ instance (Monoid w) => MonadIO (Logger w) where
57 liftIO = Logger . const
57 liftIO = Logger . const
59instance (Monoid w) => MonadWriter w (Logger w) where
59instance (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, ())
61 listen l = Logger $ \r -> do
61 listen l = Logger $ \r -> do
62 (a, w) <- liftIO (runLogger' l)
62 (a, w) <- liftIO (runLogger' l)
63− modifyIORef' r (mappend w)
63+ atomicModifyIORef' r $ \w' -> (mappend w' w, (a, w))
65 pass l = Logger $ \r -> do
64 pass l = Logger $ \r -> do
66 ((a, f), w) <- liftIO (runLogger' l)
65 ((a, f), w) <- liftIO (runLogger' l)
67− modifyIORef' r (mappend (f w))
66+ atomicModifyIORef' r $ \w' -> (mappend w' (f w), a)
70instance (Monoid w) => MonadBase IO (Logger w) where
68instance (Monoid w) => MonadBase IO (Logger w) where
71 liftBase = liftIO
69 liftBase = liftIO