He estado utilizando Data.Binary para serializar datos en archivos. En mi aplicación, agrego elementos a estos archivos de forma incremental. Los dos paquetes de serialización más populares, binarios y de cereal, ambos serializan las listas como un recuento seguido de los elementos de la lista. Debido a esto, no puedo agregar a mis archivos serializados. Actualmente leo en el archivo completo, deserializo la lista, anexo a la lista, serializo nuevamente la lista y la vuelvo a escribir en el archivo. Sin embargo, mi conjunto de datos es cada vez más grande y me estoy quedando sin memoria. Probablemente podría ir unboxing mis estructuras de datos para ganar algo de espacio, pero ese enfoque no escala.Serialización binaria para listas de longitud indefinida en Haskell
Una solución sería ensuciarse con el formato de archivo para cambiar el recuento inicial, luego solo anexar mis elementos. Pero eso no es muy satisfactorio, sin mencionar que es sensible a los cambios futuros en el formato de archivo como resultado de romper la abstracción. Iteratos/Enumeradores vienen a la mente como una opción atractiva aquí. Busqué una biblioteca que los combinara con una serialización binaria, pero no encontré nada. Alguien sabe si esto ya se ha hecho? Si no, ¿sería útil una biblioteca para esto? ¿O me estoy perdiendo algo?
¿Podría escribir una instancia de transmisión para Binary? Es relativamente fácil escribir un codificador de fragmentos (ansioso), que escribe conjuntos de * n * elementos a la vez. –
Oh, no estoy en desacuerdo con que sea bastante sencillo. Principalmente quiero saber si ya está hecho. Además, si no, ¿existen abstracciones o clases de tipos de las que debería partir? – mightybyte
No hay ninguno que yo sepa. Aunque es posible que tengas suerte buscando API de archivos buscables en Hackage. –