Term_to_binary Эрланга в Хаскеле - PullRequest
       15

Term_to_binary Эрланга в Хаскеле

5 голосов
/ 14 февраля 2010

Существует ли метод сериализации без суеты для Haskell, похожий на вызов Erlang term_to_binary / binary_to_term? Data.Binary кажется излишне сложным и необработанным. См. этот пример , где вы в основном вручную кодируете термины в целые числа.

1 Ответ

10 голосов
/ 14 февраля 2010

Используйте Data.Binary и один из производных скриптов, поставляемых с пакетом.

Это очень просто получить двоичные экземпляры, используя функции «получить» или «получить», предоставленные в наборе инструментов Data.Binay.

derive :: (Data a) => a -> String

Для любого «a» в Данных он получает двоичный экземпляр для вас в виде строки. Также есть версия putStr, производная от M. Пример:

*Main> deriveM (undefined :: Drinks)
instance Binary Main.Drinks where
  put (Beer a) = putWord8 0 >> put a
  put Coffee = putWord8 1
  put Tea = putWord8 2
  put EnergyDrink = putWord8 3
  put Water = putWord8 4
  put Wine = putWord8 5
  put Whisky = putWord8 6
  get = do
    tag_ <- getWord8
    case tag_ of
      0 -> get >>= \a -> return (Beer a)
      1 -> return Coffee
      2 -> return Tea
      3 -> return EnergyDrink
      4 -> return Water
      5 -> return Wine
      6 -> return Whisky
      _ -> fail "no parse"

Пример, который вы приводите, является примером того, как выглядит сгенерированный машиной результат - да, это все биты на самом низком уровне! Не пишите это вручную - используйте инструмент, чтобы вывести его для вас через рефлексию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...