Re: [Haskell] сериализация
От: qnikst  
Дата: 25.07.12 10:34
Оценка: +1
Здравствуйте, BitField, Вы писали:

BF>А расскажите пожалуйста, как каноничнее писать чтение/запись (вернее, сборку/разборку) бинарных файлов определенного формата.

BF>Сейчас есть такое:

BF>
BF>type Bin = ByteString

BF>class RW a where
BF>    readBin  :: Bin -> (a, Bin)
BF>    writeBin :: a -> Bin -> Bin
BF>-- standard types
BF>instance RW Word8 where 
BF>    readBin = ...
BF>    writeBin = ...
BF>instance RW Word16 where ...
BF>instance RW Int8 where ...
BF>-- file objects
BF>instance RW FileHeader where ...
BF>instance RW FileRecord where ...
BF>


Каноничнее всего использовать существующие библиотеки сериализации: binary [1] или cereal [2].
Для первой нужно будет объявнить instance Binary для второго Serialize.
binary: входит в base, умеет только Lazy.ByteString, достаточно быстрый. Serialize не входит
в base, умеет как ленивые, так и строгие строки, говорят, то такой же по скорости. Можно ещё
почитать соотвествующую тему в haskell-cafè [3].

[1] http://hackage.haskell.org/package/binary-0.5.1.1
[2] http://hackage.haskell.org/package/cereal-0.3.5.2
[3] http://www.haskell.org/pipermail/haskell-cafe/2010-July/079790.html
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.