Мы хотели бы сериализировать данные в определенном двоичном формате. Мы используем Data.ByteString
s внутренне.
Так, вопрос: Как преобразовать различные типы данных, мы используем для a ByteString
. Для String
у нас нет проблемы, мы можем использовать encodeLazyByteString UTF8 "string"
. Но мы также хотели бы преобразовать Integer
s к ByteString
s (обратный порядок байтов).
Кто-либо знает, как сделать это и/или имеет какие-либо хорошие советы с помощью Haskell и двоичных форматов?
Спасибо!
Идеальная работа для Data.Binary:
Prelude> :m + Data.Binary
Prelude Data.Binary> encode (pi :: Double)
Chunk "\SOH\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\a\CAN-DT\251!\EM\255\255\255\255\255\255\255\205" Empty
Prelude Data.Binary> encode (42 :: Integer)
Chunk "\NUL\NUL\NUL\NUL*" Empty
для получения ленивых строк байтов, которые, конечно, можно преобразовать в строгие. Пакет cereal предоставляет почти такой же интерфейс, но выдает только строгие строки байтов (поэтому нет бесконечной потоковой передачи кодировок).
Взгляните на двоичный пакет или любой из его неленивых вариантов: злак или двоично-строгий .
Во всех трех случаях, поскольку у вас есть конкретный двоичный формат, я бы проигнорировал класс типа Binary
, определенный в каждом из них, и вместо этого сосредоточился бы на Put
и Получите
монад, которые они определяют.