Erlang在Haskell中的term_to_binary?

时间:2010-02-14 07:51:35

标签: serialization haskell binary

Haskell是否有一个简单的序列化方法,类似于Erlang的term_to_binary / binary_to_term调用? Data.Binary似乎不必要地复杂和原始。请参阅基本上手动将术语编码为整数的this example

1 个答案:

答案 0 :(得分:10)

使用Data.Binary,以及随软件包提供的一个派生脚本。

通过Data.Binay工具集中提供的'derive'或'deriveM'函数派生二进制实例非常简单。

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

对于Data中的任何“a”,它会为您派生一个Binary实例作为String。还有一个putStr版本,deriveM。 例如:

*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"

您引用的示例是机器生成的输出的示例 - 是的,它是最低级别的所有位!不要手工编写 - 使用工具通过反射为你派生。

相关问题