No estoy seguro de si usar Generics es una mejor oportunidad para lograr un alto rendimiento. Mi mejor apuesta sería realmente estar escribiendo su propia instancia de Serializable como esto:
instance (Serializable a) => Serializable (HashMap a) where
...
Para evitar la creación de instancias huérfanas se pueden utilizar newtype truco:
newtype SerializableHashMap a = SerializableHashMap { toHashMap :: HashMap a }
instance (Serializable a) => SerializableHashMap a where
...
La pregunta es cómo definir ...
?
No hay una respuesta definitiva antes de intentar implementar y comparar posibles soluciones.
Una posible solución es usar las funciones toList
/fromList
y almacenar/leer el tamaño de HashMap
.
El otro (que sería similar al uso de genéricos) sería escribir serialización directa basada en la estructura interna de HashMap. Dado el hecho de que realmente no tiene las partes internas exportadas, eso sería solo un trabajo para Generics.
¿Cuál es el problema con la derivación de genérico? – Cubic
Para derivar genérico, para un tipo personalizado, tenemos que escribir algo como: 'Algo de datos = Algo Int Int derivar Generic' ¿Cómo se puede hacer esto si el tipo de datos se encuentra en una biblioteca en Hackage (aparte de la presentación un parche para el mantenedor de la biblioteca)? – donatello
Hmm ...Bueno, personalmente sospecho que serializar HashMaps como este no va a funcionar, y que terminará teniendo que usar otra implementación que admita el tipo de serialización que desea, pero veamos lo que dicen los demás. – Cubic