折叠[Word8]和ByteString具有相同的功能?

时间:2016-07-24 15:27:05

标签: haskell bytestring

事实证明Foldable没有ByteString可用的实例。我想在foldl'[Word8]上编写一个使用ByteString的函数,但我无法做到。由于ByteString是数据方式,与[Word8]相同,因此我似乎应该能够这样做。

是否有可用的软件包集成了这两个软件包,还是我必须自己使用类型类?

2 个答案:

答案 0 :(得分:9)

查看MonoFoldable class包中定义的mono-traversable

它包含ByteString[a]的实例。

答案 1 :(得分:7)

ErikR的答案很棒。我只想插入一个旁注。如果您有lens,则进行bytes遍历:

λ> import Data.ByteString.Lens
λ> import Control.Lens
λ> :t foldrOf bytes
foldrOf bytes
  :: IsByteString s => (GHC.Word.Word8 -> r -> r) -> r -> s -> r

从某种意义上说,您要问的问题是lens包的motivation:我们是否可以扩展Data.FoldableData.Traversable中的函数,以便不仅使用常规实例FoldableTraversable,还有行为撰写的对象,如可折叠和可遍历的对象?