Non sono sicuro che l'uso di Generics è un colpo migliore per raggiungere alte prestazioni. La mia soluzione migliore sarebbe effettivamente scrivere il proprio istanza per Serializable come questo:
instance (Serializable a) => Serializable (HashMap a) where
...
per evitare di creare istanze di orfani è possibile utilizzare Newtype trucco:
newtype SerializableHashMap a = SerializableHashMap { toHashMap :: HashMap a }
instance (Serializable a) => SerializableHashMap a where
...
La domanda è come definire ...
?
Non esiste una risposta definitiva prima di provare e implementare e confrontare le possibili soluzioni.
Una possibile soluzione è utilizzare le funzioni toList
/fromList
e memorizzare/leggere la dimensione dello HashMap
.
L'altro (che sarebbe simile all'utilizzo di Generics) sarebbe scrivere la serializzazione diretta in base alla struttura interna di HashMap. Dato che non hai davvero esportato i componenti interni, sarebbe un lavoro solo per Generics.
Qual è il problema con il derivato generico? – Cubic
Per ricavare generico, per un tipo personalizzato, abbiamo bisogno di scrivere qualcosa di simile: 'Qualcosa di dati = Qualcosa Int Int derivante Generic' Come può essere fatto se il tipo di dati è in una libreria su Hackage (diverso da quello della presentazione una patch per il manutentore della libreria)? – donatello
Hmm ...Beh, personalmente sospetto che Serializing HashMaps come questo non funzioni, e che finirai per dover usare un'altra implementazione che supporti il tipo di serializzazione che vuoi, ma vediamo cosa dicono gli altri. – Cubic