Двоичная сериализация для списков неопределенной длины в Haskell

Я использовал Data.Binary для сериализации данных в файлы. В моем приложении я постепенно добавляю элементы в эти файлы. Два самых популярных пакета сериализации, binary и cereal, сериализуют списки как счетчик, за которым следуют элементы списка. Из-за этого я не могу добавлять свои сериализованные файлы. В настоящее время я читаю весь файл, десериализую список, добавляю в список, повторно сериализую список и записываю его обратно в файл. Однако мой набор данных становится большим, и мне начинает не хватать памяти. Я мог бы, вероятно, распаковать свои структуры данных, чтобы получить немного места, но этот подход не масштабируется.

Одним из решений было бы разобраться с форматом файла, чтобы изменить начальное количество, а затем просто добавить мои элементы. Но это не очень приятно, не говоря уже о том, что он чувствителен к будущим изменениям в формате файла в результате нарушения абстракции. Итераторы / счетчики приходят на ум как привлекательный вариант. Я искал библиотеку, сочетающую их с двоичной сериализацией, но ничего не нашел. Кто-нибудь знает, было ли это уже сделано? Если нет, была бы полезна библиотека для этого? Или мне что-то не хватает?

19
задан Don Stewart 1 June 2011 в 17:38
поделиться