事實證明沒有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,你打我:) –