diff --git a/prometheus.cabal b/prometheus.cabal
--- a/prometheus.cabal
+++ b/prometheus.cabal
@@ -1,5 +1,5 @@
 name:                prometheus
-version:             2.0.0
+version:             2.0.1
 synopsis:            Prometheus Haskell Client
 homepage:            http://github.com/bitnomial/prometheus
 bug-reports:         http://github.com/bitnomial/prometheus/issues
diff --git a/src/System/Metrics/Prometheus/Concurrent/Registry.hs b/src/System/Metrics/Prometheus/Concurrent/Registry.hs
--- a/src/System/Metrics/Prometheus/Concurrent/Registry.hs
+++ b/src/System/Metrics/Prometheus/Concurrent/Registry.hs
@@ -8,6 +8,7 @@
        ) where
 
 
+import           Control.Applicative                        ((<$>))
 import           Control.Concurrent.MVar                    (MVar,
                                                              modifyMVarMasked,
                                                              newMVar, withMVar)
diff --git a/src/System/Metrics/Prometheus/Concurrent/RegistryT.hs b/src/System/Metrics/Prometheus/Concurrent/RegistryT.hs
--- a/src/System/Metrics/Prometheus/Concurrent/RegistryT.hs
+++ b/src/System/Metrics/Prometheus/Concurrent/RegistryT.hs
@@ -2,6 +2,7 @@
 
 module System.Metrics.Prometheus.Concurrent.RegistryT where
 
+import           Control.Applicative                           ((<$>))
 import           Control.Monad.IO.Class                        (MonadIO, liftIO)
 import           Control.Monad.Trans.Class                     (MonadTrans)
 import           Control.Monad.Trans.Reader                    (ReaderT (..),
diff --git a/src/System/Metrics/Prometheus/Http/Scrape.hs b/src/System/Metrics/Prometheus/Http/Scrape.hs
--- a/src/System/Metrics/Prometheus/Http/Scrape.hs
+++ b/src/System/Metrics/Prometheus/Http/Scrape.hs
@@ -8,6 +8,7 @@
        )
        where
 
+import           Control.Applicative                            ((<$>))
 import           Control.Monad.IO.Class                         (MonadIO,
                                                                  liftIO)
 import           Data.Text                                      (Text)
diff --git a/src/System/Metrics/Prometheus/Metric/Counter.hs b/src/System/Metrics/Prometheus/Metric/Counter.hs
--- a/src/System/Metrics/Prometheus/Metric/Counter.hs
+++ b/src/System/Metrics/Prometheus/Metric/Counter.hs
@@ -9,6 +9,7 @@
        ) where
 
 
+import           Control.Applicative  ((<$>))
 import           Data.Atomics.Counter (AtomicCounter, incrCounter, newCounter)
 
 
@@ -21,11 +22,13 @@
 
 
 addAndSample :: Int -> Counter -> IO CounterSample
-addAndSample by | by >= 0 = fmap CounterSample . incrCounter by . unCounter
+addAndSample by | by >= 0   = fmap CounterSample . incrCounter by . unCounter
                 | otherwise = error "must be >= 0"
 
+
 add :: Int -> Counter -> IO ()
 add by c = addAndSample by c >> pure ()
+
 
 inc :: Counter -> IO ()
 inc = add 1
diff --git a/src/System/Metrics/Prometheus/Metric/Gauge.hs b/src/System/Metrics/Prometheus/Metric/Gauge.hs
--- a/src/System/Metrics/Prometheus/Metric/Gauge.hs
+++ b/src/System/Metrics/Prometheus/Metric/Gauge.hs
@@ -11,8 +11,8 @@
        , modifyAndSample
        ) where
 
-import           Data.IORef (IORef, atomicModifyIORef', atomicWriteIORef,
-                             newIORef, readIORef)
+import           Control.Applicative ((<$>))
+import           Data.IORef          (IORef, atomicModifyIORef', newIORef)
 
 
 newtype Gauge = Gauge { unGauge :: IORef Double }
@@ -23,18 +23,17 @@
 new = Gauge <$> newIORef 0
 
 
-modifyAndSample :: (Double -> (Double, a)) -> Gauge -> IO a
-modifyAndSample f = flip atomicModifyIORef' f . unGauge
+modifyAndSample :: (Double -> Double) -> Gauge -> IO GaugeSample
+modifyAndSample f = flip atomicModifyIORef' g . unGauge
+  where g v = (f v, GaugeSample $ f v)
 
 
 add :: Double -> Gauge -> IO ()
-add x = modifyAndSample f
-  where f v = (v + x, ())
+add x g = modifyAndSample (+ x) g >> pure ()
 
 
 sub :: Double -> Gauge -> IO ()
-sub x = modifyAndSample f
-  where f v = (v - x, ())
+sub x g = modifyAndSample (subtract x) g >> pure ()
 
 
 inc :: Gauge -> IO ()
@@ -46,8 +45,8 @@
 
 
 set :: Double -> Gauge -> IO ()
-set x = flip atomicWriteIORef x . unGauge
+set x g = modifyAndSample (const x) g >> pure ()
 
 
 sample :: Gauge -> IO GaugeSample
-sample = fmap GaugeSample . readIORef . unGauge
+sample = modifyAndSample id
diff --git a/src/System/Metrics/Prometheus/Metric/Histogram.hs b/src/System/Metrics/Prometheus/Metric/Histogram.hs
--- a/src/System/Metrics/Prometheus/Metric/Histogram.hs
+++ b/src/System/Metrics/Prometheus/Metric/Histogram.hs
@@ -12,11 +12,13 @@
        ) where
 
 
-import           Control.Monad (void)
-import           Data.Bool     (bool)
-import           Data.IORef    (IORef, atomicModifyIORef', newIORef, readIORef)
-import           Data.Map      (Map)
-import qualified Data.Map      as Map
+import           Control.Applicative ((<$>))
+import           Control.Monad       (void)
+import           Data.Bool           (bool)
+import           Data.IORef          (IORef, atomicModifyIORef', newIORef,
+                                      readIORef)
+import           Data.Map            (Map)
+import qualified Data.Map            as Map
 
 
 newtype Histogram = Histogram { unHistogram :: IORef HistogramSample }
diff --git a/src/System/Metrics/Prometheus/MetricId.hs b/src/System/Metrics/Prometheus/MetricId.hs
--- a/src/System/Metrics/Prometheus/MetricId.hs
+++ b/src/System/Metrics/Prometheus/MetricId.hs
@@ -2,11 +2,13 @@
 
 module System.Metrics.Prometheus.MetricId where
 
-import           Data.Map    (Map)
-import qualified Data.Map    as Map
-import           Data.String (IsString)
-import           Data.Text   (Text)
-import           Prelude     hiding (null)
+import           Data.Map       (Map)
+import qualified Data.Map       as Map
+import           Data.Monoid    ()
+import           Data.Semigroup ()
+import           Data.String    (IsString)
+import           Data.Text      (Text)
+import           Prelude        hiding (null)
 
 
 newtype Name = Name { unName :: Text } deriving (Show, Eq, Ord, IsString, Monoid, Semigroup)
diff --git a/src/System/Metrics/Prometheus/Registry.hs b/src/System/Metrics/Prometheus/Registry.hs
--- a/src/System/Metrics/Prometheus/Registry.hs
+++ b/src/System/Metrics/Prometheus/Registry.hs
@@ -10,6 +10,7 @@
        , sample
        ) where
 
+import           Control.Applicative                        ((<$>))
 import           Control.Exception                          (Exception, throw)
 import           Data.Map                                   (Map)
 import qualified Data.Map                                   as Map
diff --git a/src/System/Metrics/Prometheus/RegistryT.hs b/src/System/Metrics/Prometheus/RegistryT.hs
--- a/src/System/Metrics/Prometheus/RegistryT.hs
+++ b/src/System/Metrics/Prometheus/RegistryT.hs
@@ -2,6 +2,7 @@
 
 module System.Metrics.Prometheus.RegistryT where
 
+import           Control.Applicative                        ((<$>))
 import           Control.Monad.IO.Class                     (MonadIO, liftIO)
 import           Control.Monad.Trans.Class                  (MonadTrans)
 import           Control.Monad.Trans.State.Strict           (StateT (..),
