diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,4 +1,6 @@
-0.0.15:
+0.0.16:
+	* Add MaxOS parameter to indicate memory in use by RTS
+	* Add haddock docmentation to the 'Column' type
 	* Fix bug in treating words as int, use only Word as reported by GHC.
 
 0.0.14:
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -2,6 +2,10 @@
 
 Measures the memory usage of a Haskell value or function
 
+# Limitations
+
+*  :warning: Turn off the `-threaded` flag, otherwise it will cause inconsistent results.
+
 ## Example use
 
 ``` haskell
diff --git a/src/Weigh.hs b/src/Weigh.hs
--- a/src/Weigh.hs
+++ b/src/Weigh.hs
@@ -46,6 +46,7 @@
   ,defaultConfig
   -- * Simple combinators
   ,func
+  ,func'
   ,io
   ,value
   ,action
@@ -96,7 +97,16 @@
 -- Types
 
 -- | Table column.
-data Column = Case | Allocated | GCs| Live | Check | Max
+data Column
+  = Case      -- ^ Case name for the column
+  | Allocated -- ^ Total bytes allocated
+  | GCs       -- ^ Total number of GCs
+  | Live      -- ^ Total amount of live data in the heap
+  | Check     -- ^ Table column indicating about the test status
+  | Max       -- ^ Maximum residency memory in use
+  | MaxOS     -- ^ Maximum memory in use by the RTS. Valid only for
+              -- GHC >= 8.2.2. For unsupported GHC, this is reported
+              -- as 0.
   deriving (Show, Eq, Enum)
 
 -- | Weigh configuration.
@@ -121,6 +131,7 @@
          ,weightGCs :: !Word32
          ,weightLiveBytes :: !Word64
          ,weightMaxBytes :: !Word64
+         ,weightMaxOSBytes :: !Word64
          }
   deriving (Read,Show)
 
@@ -226,6 +237,15 @@
      -> Weigh ()
 func name !f !x = validateFunc name f x (const Nothing)
 
+-- | Weigh a function applied to an argument. Unlike 'func', the argument
+-- is evaluated to normal form before the function is applied.
+func' :: (NFData a, NFData b)
+      => String
+      -> (b -> a)
+      -> b
+      -> Weigh ()
+func' name !f (force -> !x) = validateFunc name f x (const Nothing)
+
 -- | Weigh an action applied to an argument.
 --
 -- Implemented in terms of 'validateAction'.
@@ -319,7 +339,7 @@
         Just act -> do
           case act of
             Action !run arg _ _ -> do
-              (bytes, gcs, liveBytes, maxByte) <-
+              (bytes, gcs, liveBytes, maxByte, maxOSBytes) <-
                 case run of
                   Right f -> weighFunc f arg
                   Left m -> weighAction m arg
@@ -332,6 +352,7 @@
                     , weightGCs = gcs
                     , weightLiveBytes = liveBytes
                     , weightMaxBytes = maxByte
+                    , weightMaxOSBytes = maxOSBytes
                     }))
           return Nothing
     _ -> fmap Just (Traversable.traverse (Traversable.traverse fork) cases)
@@ -380,7 +401,7 @@
   :: (NFData a)
   => (b -> a)         -- ^ A function whose memory use we want to measure.
   -> b                -- ^ Argument to the function. Doesn't have to be forced.
-  -> IO (Word64,Word32,Word64,Word64) -- ^ Bytes allocated and garbage collections.
+  -> IO (Word64,Word32,Word64,Word64,Word64) -- ^ Bytes allocated and garbage collections.
 weighFunc run !arg = snd <$> weighFuncResult run arg
 
 -- | Weigh a pure function and return the result. This function is heavily
@@ -389,7 +410,7 @@
   :: (NFData a)
   => (b -> a)         -- ^ A function whose memory use we want to measure.
   -> b                -- ^ Argument to the function. Doesn't have to be forced.
-  -> IO (a, (Word64,Word32,Word64,Word64)) -- ^ Result, Bytes allocated, GCs.
+  -> IO (a, (Word64,Word32,Word64,Word64,Word64)) -- ^ Result, Bytes allocated, GCs.
 weighFuncResult run !arg = do
   ghcStatsSizeInBytes <- GHCStats.getGhcStatsSizeInBytes
   performGC
@@ -422,20 +443,24 @@
       maxBytes =
         (GHCStats.maxBytesInUse actionStats `subtracting`
          GHCStats.maxBytesInUse bootupStats)
-  return (result, (actualBytes, actionGCs, liveBytes, maxBytes))
-  where
-    subtracting x y =
-      if x > y
-        then x - y
-        else 0
+      maxOSBytes =
+        (GHCStats.maxOSBytes actionStats `subtracting`
+            GHCStats.maxOSBytes bootupStats)
+  return (result, (actualBytes, actionGCs, liveBytes, maxBytes, maxOSBytes))
 
+subtracting :: (Ord p, Num p) => p -> p -> p
+subtracting x y =
+  if x > y
+    then x - y
+    else 0
+
 -- | Weigh an IO action. This function is based on `weighActionResult`, which is
 --   heavily documented inside.
 weighAction
   :: (NFData a)
   => (b -> IO a)      -- ^ A function whose memory use we want to measure.
   -> b                -- ^ Argument to the function. Doesn't have to be forced.
-  -> IO (Word64,Word32,Word64,Word64) -- ^ Bytes allocated and garbage collections.
+  -> IO (Word64,Word32,Word64,Word64,Word64) -- ^ Bytes allocated and garbage collections.
 weighAction run !arg = snd <$> weighActionResult run arg
 
 -- | Weigh an IO action, and return the result. This function is heavily
@@ -444,7 +469,7 @@
   :: (NFData a)
   => (b -> IO a)      -- ^ A function whose memory use we want to measure.
   -> b                -- ^ Argument to the function. Doesn't have to be forced.
-  -> IO (a, (Word64,Word32,Word64,Word64)) -- ^ Result, Bytes allocated and GCs.
+  -> IO (a, (Word64,Word32,Word64,Word64,Word64)) -- ^ Result, Bytes allocated and GCs.
 weighActionResult run !arg = do
   ghcStatsSizeInBytes <- GHCStats.getGhcStatsSizeInBytes
   performGC
@@ -459,30 +484,37 @@
   !actionStats <- GHCStats.getStats
   let reflectionGCs = 1 -- We performed an additional GC.
       actionBytes =
-        (GHCStats.totalBytesAllocated actionStats -
-         GHCStats.totalBytesAllocated bootupStats) -
+        (GHCStats.totalBytesAllocated actionStats `subtracting`
+         GHCStats.totalBytesAllocated bootupStats) `subtracting`
            -- We subtract the size of "bootupStats", which will be
            -- included after we did the performGC.
         fromIntegral ghcStatsSizeInBytes
       actionGCs =
-        GHCStats.gcCount actionStats - GHCStats.gcCount bootupStats -
+        GHCStats.gcCount actionStats `subtracting` GHCStats.gcCount bootupStats `subtracting`
         reflectionGCs
          -- If overheadBytes is too large, we conservatively just
          -- return zero. It's not perfect, but this library is for
          -- measuring large quantities anyway.
       actualBytes = max 0 actionBytes
       liveBytes =
-        max 0 (GHCStats.liveBytes actionStats - GHCStats.liveBytes bootupStats)
+        max 0 (GHCStats.liveBytes actionStats `subtracting` GHCStats.liveBytes bootupStats)
       maxBytes =
         max
           0
-          (GHCStats.maxBytesInUse actionStats -
+          (GHCStats.maxBytesInUse actionStats `subtracting`
            GHCStats.maxBytesInUse bootupStats)
+      maxOSBytes =
+        max
+          0
+          (GHCStats.maxOSBytes actionStats `subtracting`
+           GHCStats.maxOSBytes bootupStats)
   return (result,
-    ( fromIntegral actualBytes
-    , fromIntegral actionGCs
-    , fromIntegral liveBytes
-    , fromIntegral maxBytes))
+    (  actualBytes
+    ,  actionGCs
+    ,  liveBytes
+    ,  maxBytes
+    ,  maxOSBytes
+    ))
 
 --------------------------------------------------------------------------------
 -- Formatting functions
@@ -535,6 +567,7 @@
       , (Live, (False, "Live"))
       , (Check, (True, "Check"))
       , (Max, (False, "Max"))
+      , (MaxOS, (False, "MaxOS"))
       ]
     toRow (w, err) =
       [ (Case, (True, takeLastAfterBk $ weightLabel w))
@@ -542,6 +575,7 @@
       , (GCs, (False, commas (weightGCs w)))
       , (Live, (False, commas (weightLiveBytes w)))
       , (Max, (False, commas (weightMaxBytes w)))
+      , (MaxOS, (False, commas (weightMaxOSBytes w)))
       , ( Check
         , ( True
           , case err of
diff --git a/src/Weigh/GHCStats.hs b/src/Weigh/GHCStats.hs
--- a/src/Weigh/GHCStats.hs
+++ b/src/Weigh/GHCStats.hs
@@ -10,7 +10,9 @@
   ,gcCount
   ,totalBytesAllocated
   ,liveBytes
-  ,maxBytesInUse)
+  ,maxBytesInUse
+  ,maxOSBytes
+  )
   where
 
 import Data.Word
@@ -32,6 +34,9 @@
 
 maxBytesInUse :: RTSStats -> Word64
 maxBytesInUse = max_live_bytes
+
+maxOSBytes :: RTSStats -> Word64
+maxOSBytes = max_mem_in_use_bytes
 
 -- | Get the size of a 'RTSStats' object in bytes.
 getGhcStatsSizeInBytes :: IO Word64
diff --git a/weigh.cabal b/weigh.cabal
--- a/weigh.cabal
+++ b/weigh.cabal
@@ -1,5 +1,5 @@
 name:                weigh
-version:             0.0.15
+version:             0.0.16
 synopsis:            Measure allocations of a Haskell functions/values
 description:         Please see README.md
 homepage:            https://github.com/fpco/weigh#readme
