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
[Haskell] сериализация
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 25.07.12 10:19
Оценка:
А расскажите пожалуйста, как каноничнее писать чтение/запись (вернее, сборку/разборку) бинарных файлов определенного формата.
Сейчас есть такое:

type Bin = ByteString

class RW a where
    readBin  :: Bin -> (a, Bin)
    writeBin :: a -> Bin -> Bin
-- standard types
instance RW Word8 where 
    readBin = ...
    writeBin = ...
instance RW Word16 where ...
instance RW Int8 where ...
-- file objects
instance RW FileHeader where ...
instance RW FileRecord where ...
haskell s10n serialization
Re[2]: [Haskell] сериализация
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 25.07.12 11:13
Оценка:
Здравствуйте, qnikst, Вы писали:

Q>Здравствуйте, BitField, Вы писали:


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


Q>Каноничнее всего использовать существующие библиотеки сериализации: binary [1] или cereal [2].

Q>Для первой нужно будет объявнить instance Binary для второго Serialize.

Binary и Serialize не подходят. См. выделенное. То есть, формат файла задан не мной.

Похоже, тут нужно смотреть Put|Get или Putter|Get.
Re[3]: SOLVED
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 25.07.12 11:34
Оценка:
Здравствуйте, BitField, Вы писали:

BF>Похоже, тут нужно смотреть Put|Get или Putter|Get.


Почитал вот это, вроде бы все понял.
http://www.haskell.org/haskellwiki/DealingWithBinaryData#Binary_parsing
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.