BSD-3-Clause licensed by Chris Done
This version can be pinned in stack with:weigh-0.0.3@sha256:099002db2a0ec4b0f891839bbc0c08553bed5d9d57dfe5c431571fa9d728ac45,1588
Module documentation for 0.0.3
weigh 
Measures the memory usage of a Haskell value or function
Example use
import Weigh
-- | Weigh integers.
main :: IO ()
main =
  mainWith (do integers
               ints)
-- | Just counting integers.
integers :: Weigh ()
integers =
  do func "integers count 0" count 0
     func "integers count 1" count 1
     func "integers count 2" count 2
     func "integers count 3" count 3
     func "integers count 10" count 10
     func "integers count 100" count 100
  where count :: Integer -> ()
        count 0 = ()
        count a = count (a - 1)
-- | We count ints and ensure that the allocations are optimized away
-- to only two 64-bit Ints (16 bytes).
ints :: Weigh ()
ints =
  do validateFunc "ints count 1" count 1 (maxAllocs 24)
     validateFunc "ints count 10" count 10 (maxAllocs 24)
     validateFunc "ints count 1000000" count 1000000 (maxAllocs 24)
  where count :: Int -> ()
        count 0 = ()
        count a = count (a - 1)
Output results:
Case                Bytes  GCs  Check
integers count 0        0    0  OK
integers count 1       32    0  OK
integers count 2       64    0  OK
integers count 3       96    0  OK
integers count 10     320    0  OK
integers count 100  3,200    0  OK
ints count 1            0    0  OK
ints count 10           0    0  OK
ints count 1000000      0    0  OK
You can try this out with stack test in the weight directory.
To try out other examples, try:
stack test :weigh-maps --flag weigh:weigh-maps