事实证明没有Foldable
的实例可用。我想编写一个函数,在[Word8]
或ByteString
上使用foldl'
,但我不能。由于ByteString
与数据相同,与[Word8]
相同,所以我应该可以。使用相同的函数折叠[Word8]和ByteString?
是否有可用于整合这两者的软件包,还是必须将我自己的软件与类型类一起滚动?
事实证明没有Foldable
的实例可用。我想编写一个函数,在[Word8]
或ByteString
上使用foldl'
,但我不能。由于ByteString
与数据相同,与[Word8]
相同,所以我应该可以。使用相同的函数折叠[Word8]和ByteString?
是否有可用于整合这两者的软件包,还是必须将我自己的软件与类型类一起滚动?
看看mono-traversable包中定义的MonoFoldable class。
它有ByteString
和[a]
的实例。
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
在某种意义上你问的问题是motivation为lens
包:可以,我们在Data.Foldable
和Data.Traversable
扩展功能消耗的Foldable
不仅普通实例和Traversable
,但也是表现和撰写像对象可折叠和traversables?
Ach,你打我:) –