ghc-datasize

  • データのバイト数がわかる

  • ghc-8.6.5 で試した

  • Lifted type にしか使えないっぽい

    • 0# とかは使えなかった。levity polymorphism を使えば良いかも?

使い方

λ cabal update
λ cabal repl --build-depends ghc-datasize

λ> import GHC.DataSize
λ> recursiveSize True
16
λ> recursiveSize 'a'
16
λ> recursiveSize 0
16
λ> recursiveSize []
16
λ> recursiveSize [0]
56
λ> recursiveSize [0,1]
96
λ> recursiveSize [0,1,2]
136

関数は3つしかない

data

closureSize

recursiveSize

recursiveSizeNF

True

16

16

56

'a'

16

16

56

0

16

16

56

[]

16

16

-

[]::[Int]

16

16

240

[]::[Maybe Int]

16

16

392

[0]

24

56

280

[0,1]

24

96

320

[0,1,2]

24

136

360

Nothing

16

16

240

Just True

16

32

256

undefined

32

1648

-

deepseq でサイズが変化する例

λ> import Control.DeepSeq
λ> recursiveSize $ Just (1+1)
992
λ> recursiveSize $! Just (1+1)
992
λ> recursiveSize $!! Just (1+1)
32

参考リソース

Last updated