Jak mogę znaleźć rzeczywistą ilość pamięci wymaganej do przechowywania wartości pewnego typu danych w Haskell (głównie z GHC)? Czy można to ocenić w czasie wykonywania (np. W GHCi), czy też można oszacować zapotrzebowanie na pamięć złożonego typu danych na podstawie jego komponentów?
Ogólnie rzecz biorąc, jeśli znane są wymagania dotyczące pamięci typów ai b, jaki jest narzut pamięci algebraicznych typów danych, takich jak:
data Uno = Uno a
data Due = Due a b
Na przykład, ile bajtów pamięci zajmują te wartości?
1 :: Int8
1 :: Integer
2^100 :: Integer
\x -> x + 1
(1 :: Int8, 2 :: Int8)
[1] :: [Int8]
Just (1 :: Int8)
Nothing
Rozumiem, że faktyczna alokacja pamięci jest wyższa z powodu opóźnionego czyszczenia pamięci. Może się znacznie różnić ze względu na leniwą ocenę (a wielkość pozycji nie jest związana z wielkością wartości). Pytanie brzmi, biorąc pod uwagę typ danych, ile pamięci zajmuje jego wartość po pełnej ocenie?
Znalazłem :set +sopcję w GHCi, aby zobaczyć statystyki pamięci, ale nie jest jasne, jak oszacować ślad pamięci pojedynczej wartości.