Предположим, я создал тип следующим образом:
data RequestAck =
RequestAck { ackOK :: Word32, ackMsgCode :: Word32 }
Я вижу, что он имеет размер 2 * 4 байта и где-то это константа.
Единственная проблема состоит в том, что, как только я добавлю поле к типу, мне придется помнить, чтобы обновить мою константу.
Есть ли какая-нибудь функция, которая предоставит мне размер данного типа, например, t -> Int
?
Функция, которая приближается к тому, что я хочу, это
gsize :: Data a => a -> Int
внутри модуля Data.Generics.Schemes, но я не хочу, чтобы мой тип был экземпляром Data
.
Есть ли более общее решение?
Конечно, я ищу функцию, которая работает со статическим типом, например, я не хочу передавать экземпляр, а сам тип.