X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FFoldable.hs;h=c44f0cd1c80c428fa728cf063e360fefd450bccc;hb=487b9d4571a847ee0273b4627aaa135c46a51b8d;hp=ed05a165a10c8f5b8d6cce781090ac81dd506c06;hpb=dbe9d53f7f98fb0de5d6d8d8c83c496a119f8653;p=ghc-base.git diff --git a/Data/Foldable.hs b/Data/Foldable.hs index ed05a16..c44f0cd 100644 --- a/Data/Foldable.hs +++ b/Data/Foldable.hs @@ -96,7 +96,12 @@ import Array -- > foldMap f (Node l k r) = foldMap f l `mappend` f k `mappend` foldMap f r -- -- This is suitable even for abstract types, as the monoid is assumed --- to satisfy the monoid laws. +-- to satisfy the monoid laws. Alternatively, one could define @foldr@: +-- +-- > instance Foldable Tree where +-- > foldr f z Empty = z +-- > foldr f z (Leaf x) = f x z +-- > foldr f z (Node l k r) = foldr f (f k (foldr f z r)) l -- class Foldable t where -- | Combine the elements of a structure using a monoid. @@ -157,6 +162,9 @@ instance Foldable [] where instance Ix i => Foldable (Array i) where foldr f z = Prelude.foldr f z . elems + foldl f z = Prelude.foldl f z . elems + foldr1 f = Prelude.foldr1 f . elems + foldl1 f = Prelude.foldl1 f . elems -- | Fold over the elements of a structure, -- associating to the right, but strictly.