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