Как я могу определить размер типа в Haskell?

Предположим, я создал тип следующим образом:

data RequestAck = 
         RequestAck { ackOK :: Word32, ackMsgCode :: Word32 } 

Я вижу, что он имеет размер 2 * 4 байта, и где-то сделал его константой.

Единственная проблема заключается в том, что после добавления поля к типу мне придется не забыть обновить свою константу.

Есть ли функция, которая предоставит мне размер данного типа, например t -> Int ?

Функция, которая приближается к тому, что я хочу, - это

gsize :: Data a => a -> Int

внутри модуля Data.Generics.Schemes, но я не хочу, чтобы мой тип был экземпляром Data .

Есть ли более универсальное решение?

Конечно, я ищу функцию, которая работает со статическим типом, например, я хочу передавать не экземпляр, а сам тип.

14
задан Thorsten Lorenz 29 February 2012 в 02:32
поделиться