asume que creó un tipo de la siguiente manera:¿Cómo puedo determinar el tamaño de un tipo en Haskell?
data RequestAck =
RequestAck { ackOK :: Word32, ackMsgCode :: Word32 }
puedo ver que es 2 * 4 bytes grande y hacer que una constante en alguna parte.
El único problema es que una vez que agregue un campo al tipo, tendré que acordarme de actualizar mi constante.
¿Existe alguna función que me brinde el tamaño de un tipo determinado, por ejemplo, t -> Int
?
La función que se acerca a lo que yo quiero es
gsize :: Data a => a -> Int
el interior del módulo Data.Generics.Schemes, pero no quiero tener que hacer mi tipo de una instancia de Data
.
¿Existe una solución más genérica?
Para estar seguro, estoy buscando una función que opere en el tipo estático, por ejemplo, no quiero pasar una instancia, sino el tipo en sí.
indirecta: no es de 2 * 4 bytes grande. Los campos están enmarcados. –
Buen punto. En mi caso, saco las palabras y las convierto en una cadena de bytes que termina siendo de 2 * 4 bytes de longitud. Así que, en retrospectiva, obtener tamaño del tipo no tendría mucho sentido para mí debido a eso. –
"Huella de memoria de los tipos de datos Haskell": http: // stackoverflow.com/questions/3254758/memory-footprint-of-haskell-data-types, también "Cómo descubrir las representaciones de memoria de tipos de datos de GHC" http://stackoverflow.com/questions/6574444/how-to-find-out -ghcs-memory-representations-of-data-types –