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