位标志数组的数据结构是什么?

时间:2014-10-11 08:26:16

标签: arrays haskell bitflags

我将一些命令式代码移植到Haskell。我的目标是分析一个可执行文件,因此文本部分的每个字节都分配了许多标志,这些标志都适合一个字节(准确地说是6位)。

在像C这样的语言中,我只是分配一个字节数组,将它们归零并随时更新它们。我如何在Haskell中有效地完成这项工作?

换句话说:我正在寻找具有逐位访问和恒定时间更新的ByteString,因为我反汇编了更多的文本部分。

编辑:当然,如果它具有同样的效率,任何其他类型的数据结构都可以。

2 个答案:

答案 0 :(得分:9)

arrayBool - s的未装箱数组的实现是一个打包的比特。您可以在ST Monad中对此类数组进行可变更新(这与C中的运行时行为基本相同)。

答案 1 :(得分:6)

您可以使用任何数据类型的向量作为Bits typeclass的实例,例如Word64,向量中每个元素64位。如果希望数组在内存中连续,请使用未装箱的向量。