gpt4 book ai didi

haskell - 在 Haskell 中解码/编码二进制小端数据的更好方法是什么?

转载 作者:行者123 更新时间:2023-12-04 17:50:36 25 4
gpt4 key购买 nike

考虑到字节顺序,摆脱在 Haskell 中序列化/反序列化二进制数据的样板代码的最佳方法是什么?即,给定这个结构:

data Foobar = Foobar { foo :: Word16, bar :: Word32 }

并派生 Data.Binary.Binary类型类实例:
instance Binary Foobar where
get = do
foo <- get
bar <- get
return $ Foobar foo bar
decode stream :: Foobar将数据视为大端。

明显的方法是使用 getWord16le/ getWord32le功能,但它涉及大量手动工作(可以通过模板 Haskell 自动完成并很好地完成 derive )。

也许,参数化类型是解决方案?

最佳答案

如何为单词定义小端新类型?

newtype LWord16 = LWord16 { unLWord16 :: Word16 }
newtype LWord32 = LWord32 { unLWord32 :: Word32 }
instance Binary LWord16 where get = LWord16 <$> getWord16le
instance Binary LWord32 where get = LWord32 <$> getWord32le

然后为定义派生二进制
data Foobar = Foobar { foo :: LWord16, bar :: LWord32 }

应该做正确的事。

关于haskell - 在 Haskell 中解码/编码二进制小端数据的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8121430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com