Serialization 二郎';Haskell中的术语到二进制?
Haskell是否有类似于Erlang的term_to_binary/binary_to_term调用的无需大惊小怪的序列化方法?二进制看起来不必要的复杂和原始。查看您基本上是在哪里手动将术语编码为整数。使用Data.Binary和软件包附带的一个派生脚本 通过Data.Binay工具集中提供的“派生”或“派生”函数派生二进制实例非常简单Serialization 二郎';Haskell中的术语到二进制?,serialization,haskell,binary,Serialization,Haskell,Binary,Haskell是否有类似于Erlang的term_to_binary/binary_to_term调用的无需大惊小怪的序列化方法?二进制看起来不必要的复杂和原始。查看您基本上是在哪里手动将术语编码为整数。使用Data.Binary和软件包附带的一个派生脚本 通过Data.Binay工具集中提供的“派生”或“派生”函数派生二进制实例非常简单 derive :: (Data a) => a -> String 对于数据中的任何“a”,它都会为您派生一个二进制实例作为字符串。还有一个pu
derive :: (Data a) => a -> String
对于数据中的任何“a”,它都会为您派生一个二进制实例作为字符串。还有一个putStr版本,deriveM。
例如:
*Main>deriveM(未定义::饮料)
实例二元主。饮料在哪里
放(啤酒)=放(啤酒)=放(啤酒)=放
放咖啡
放茶
放置EnergyDrink=putWord8 3
放水
放酒
放威士忌
得到=做
标记获取>>=\a->返回(啤酒a)
1->返回咖啡
2->返茶
3->返回能量溜冰场
4->回水
5->返酒
6->返回威士忌
_->失败“无解析”
你举的例子是机器生成的输出的一个例子——是的,它都是最低级别的位!不过,不要用手来写——使用一个工具,通过反射为您推导出来。非常好。非常感谢。没有提到这个脚本。
*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"