Załóżmy I stworzył typ następująco:Jak określić rozmiar typu w Haskell?
data RequestAck =
RequestAck { ackOK :: Word32, ackMsgCode :: Word32 }
widzę, że jest to 2 * 4 bajty duże i sprawiają, że stała gdzieś.
Jedynym problemem jest to, że po dodaniu pola do typu, musiałbym pamiętać o aktualizacji mojej stałej.
Czy istnieje funkcja, która zapewni mi rozmiar danego typu, np. t -> Int
?
Funkcja, która zbliża się do tego, co chcę jest
gsize :: Data a => a -> Int
wewnątrz modułu Data.Generics.Schemes, ale nie chcę mieć, aby mój typ instancję Data
.
Czy istnieje bardziej ogólne rozwiązanie?
Z pewnością szukam funkcji działającej na statycznym typie, np. Nie chcę przekazywać instancji, ale samego typu.
wskazówka: Nie 2 * 4 bajty duże. Pola są w pudełku. –
Dobra uwaga. W moim przypadku wyciągam słowa i zamieniam je na test bytowy, który kończy się 2 * 4 bajtami. Tak więc z perspektywy czasu określenie rozmiaru tego typu nie miałoby dla mnie większego sensu z tego powodu. –
"Ślad pamięci typów danych Haskella": http: // stackoverflow.com/questions/3254758/memory-footprint-of-haskell-data-types, także "Jak znaleźć dane GHC o typach danych" http://stackoverflow.com/questions/6574444/how-to-find-out -ghcs-memory-reprezentacje-danych-typów –