[foldMap' filter and find added to Data.Monoid.Generator.Combinators ekmett@gmail.com**20090327000800] { hunk ./Data/Monoid/Generator/Combinators.hs 8 + , foldMap' hunk ./Data/Monoid/Generator/Combinators.hs 18 + , filter hunk ./Data/Monoid/Generator/Combinators.hs 39 +foldMap' :: (Monoid m, Generator c) => (Elem c -> m) -> c -> m +foldMap' f = getSelf . mapReduce f + hunk ./Data/Monoid/Generator/Combinators.hs 43 -concatMap f = getSelf . mapReduce f +concatMap = foldMap' hunk ./Data/Monoid/Generator/Combinators.hs 69 --- foldMap :: Generator c => (Elem c -> m) -> c -> m - --- filter :: (Generator c, Elem c `Reducer` m, m `Reducer` m) => (Elem c -> Bool) -> c -> m --- filter p = mapReduce (\x -> if p x then unit x else mempty) +filter :: (Generator c, Elem c `Reducer` m) => (Elem c -> Bool) -> c -> m +filter p = foldMap' f where + f x | p x = unit x + | otherwise = mempty hunk ./Data/Monoid/Generator/Combinators.hs 74 --- find :: Generator c => (Elem c -> Bool) -> c -> Maybe (Elem c) --- find p = getFirst . filter p +find :: Generator c => (Elem c -> Bool) -> c -> Maybe (Elem c) +find p = getFirst . filter p hunk ./Data/Monoid/Multiplicative.hs 9 -import Data.Monoid.Reducer hunk ./Data/Monoid/Reducer.hs 73 +instance Reducer a (First a) where + unit = First . Just + hunk ./Data/Monoid/Reducer.hs 79 +instance Reducer a (Last a) where + unit = Last . Just + hunk ./dist/doc/html/monoids/Data-Monoid-Generator-Combinators.html 198 +>foldMap' :: (Monoid m, Generator c) => (Elem c -> m) -> c -> m
filter :: (Generator c, Reducer (Elem c) m) => (Elem c -> Bool) -> c -> m | Source | Reducer a (Last a) |
Reducer a (First a) | ||
filter | Data.Monoid.Generator.Combinators | |
foldMap' | Data.Monoid.Generator.Combinators | Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Categorical, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Ord, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Map, Data.Monoid.IntMap, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Categorical, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Ord, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Map, Data.Monoid.IntMap, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Categorical, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Ord, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Map, Data.Monoid.IntMap, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Categorical, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Ord, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Map, Data.Monoid.IntMap, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Categorical, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Ord, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Map, Data.Monoid.IntMap, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Categorical, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Ord, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Map, Data.Monoid.IntMap, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.UnitData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Unit, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.SugarData.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Group, Data.Group.Sugar, Data.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Reducer.Sugar, Data.Monoid.Lexical.Words, Data.Monoid.Monad, Data.Monoid.Applicative, Data.Monoid.Self, Data.Monoid.Generator.Combinators, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Transformers, Data.Monoid.Multiplicative.Sugar, Data.Monoid.Unit , concatMap - , and - , or - , any - , all - , sum - , product - , elem - , notElem - ) where - -import Prelude hiding (mapM_, any, elem, filter, concatMap, and, or, all, sum, product, notElem) -import Data.Monoid.Generator -import Data.Monoid.Applicative -import Data.Monoid.Monad -import Data.Monoid.Self - -traverse_ :: (Generator c, Applicative f) => (Elem c -> f b) -> c -> f () -traverse_ f = getTraversal . mapReduce f - -for_ :: (Generator c, Applicative f) => c -> (Elem c -> f b) -> f () -for_ = flip traverse_ - -mapM_ :: (Generator c, Monad m) => (Elem c -> m b) -> c -> m () -mapM_ f = getAction . mapReduce f - -forM_ :: (Generator c, Monad m) => c -> (Elem c -> m b) -> m () -forM_ = flip mapM_ - -concatMap :: Generator c => (Elem c -> [b]) -> c -> [b] -concatMap f = getSelf . mapReduce f - -and :: (Generator c, Elem c ~ Bool) => c -> Bool -and = getAll . reduce - -or :: (Generator c, Elem c ~ Bool) => c -> Bool -or = getAny . reduce - -any :: Generator c => (Elem c -> Bool) -> c -> Bool -any f = getAny . mapReduce f - -all :: Generator c => (Elem c -> Bool) -> c -> Bool -all f = getAll . mapReduce f - -sum :: (Generator c, Num (Elem c)) => c -> Elem c -sum = getSum . reduce - -product :: (Generator c, Num (Elem c)) => c -> Elem c -product = getProduct . reduce - -elem :: (Generator c, Eq (Elem c)) => Elem c -> c -> Bool -elem = any . (==) - -notElem :: (Generator c, Eq (Elem c)) => Elem c -> c -> Bool -notElem x = not . elem x - --- foldMap :: Generator c => (Elem c -> m) -> c -> m + , foldMap' + , concatMap + , and + , or + , any + , all + , sum + , product + , elem + , notElem + , filter + ) where + +import Prelude hiding (mapM_, any, elem, filter, concatMap, and, or, all, sum, product, notElem) +import Data.Monoid.Generator +import Data.Monoid.Applicative +import Data.Monoid.Monad +import Data.Monoid.Self + +traverse_ :: (Generator c, Applicative f) => (Elem c -> f b) -> c -> f () +traverse_ f = getTraversal . mapReduce f + +for_ :: (Generator c, Applicative f) => c -> (Elem c -> f b) -> f () +for_ = flip traverse_ + +mapM_ :: (Generator c, Monad m) => (Elem c -> m b) -> c -> m () +mapM_ f = getAction . mapReduce f + +forM_ :: (Generator c, Monad m) => c -> (Elem c -> m b) -> m () +forM_ = flip mapM_ + +foldMap' :: (Monoid m, Generator c) => (Elem c -> m) -> c -> m +foldMap' f = getSelf . mapReduce f + +concatMap :: Generator c => (Elem c -> [b]) -> c -> [b] +concatMap = foldMap' + +and :: (Generator c, Elem c ~ Bool) => c -> Bool +and = getAll . reduce + +or :: (Generator c, Elem c ~ Bool) => c -> Bool +or = getAny . reduce + +any :: Generator c => (Elem c -> Bool) -> c -> Bool +any f = getAny . mapReduce f + +all :: Generator c => (Elem c -> Bool) -> c -> Bool +all f = getAll . mapReduce f + +sum :: (Generator c, Num (Elem c)) => c -> Elem c +sum = getSum . reduce + +product :: (Generator c, Num (Elem c)) => c -> Elem c +product = getProduct . reduce + +elem :: (Generator c, Eq (Elem c)) => Elem c -> c -> Bool +elem = any . (==) hunk ./dist/doc/html/monoids/src/Data-Monoid-Generator-Combinators.html 74 --- filter :: (Generator c, Elem c `Reducer` m, m `Reducer` m) => (Elem c -> Bool) -> c -> m --- filter p = mapReduce (\x -> if p x then unit x else mempty) +notElem :: (Generator c, Eq (Elem c)) => Elem c -> c -> Bool +notElem x = not . elem x hunk ./dist/doc/html/monoids/src/Data-Monoid-Generator-Combinators.html 77 --- find :: Generator c => (Elem c -> Bool) -> c -> Maybe (Elem c) --- find p = getFirst . filter p +filter :: (Generator c, Elem c `Reducer` m) => (Elem c -> Bool) -> c -> m +filter p = foldMap' f where + f x | p x = unit x + | otherwise = mempty + +find :: Generator c => (Elem c -> Bool) -> c -> Maybe (Elem c) +find p = getFirst . filter p hunk ./dist/doc/html/monoids/src/Data-Monoid-Multiplicative.html 17 -import Data.Monoid.Reducer -import Data.Monoid.Generator -import Data.Monoid.Self -import Data.Foldable - -class MultiplicativeMonoid m where - one :: m - times :: m -> m -> m - -class (MultiplicativeMonoid m, Monoid m) => Seminearring m - -instance Monoid m => MultiplicativeMonoid [m] where - one = [mempty] - xss `times` yss = [ xs `mappend` ys | xs <- xss, ys <- yss ] - -instance Monoid m => Seminearring [m] - -instance (Measured v m, Monoid m) => MultiplicativeMonoid (FingerTree v m) where - one = singleton mempty - xss `times` yss = getSelf . reduce . fmap (\xs -> fmap' (xs `mappend`) yss) $ toList xss - -instance (Measured v m, Monoid m) => Seminearring (FingerTree v m) +import Data.Monoid.Generator +import Data.Monoid.Self +import Data.Foldable + +class MultiplicativeMonoid m where + one :: m + times :: m -> m -> m + +class (MultiplicativeMonoid m, Monoid m) => Seminearring m + +instance Monoid m => MultiplicativeMonoid [m] where + one = [mempty] + xss `times` yss = [ xs `mappend` ys | xs <- xss, ys <- yss ] + +instance Monoid m => Seminearring [m] + +instance (Measured v m, Monoid m) => MultiplicativeMonoid (FingerTree v m) where + one = singleton mempty + xss `times` yss = getSelf . reduce . fmap (\xs -> fmap' (xs `mappend`) yss) $ toList xss + +instance (Measured v m, Monoid m) => Seminearring (FingerTree v m) hunk ./dist/doc/html/monoids/src/Data-Monoid-Reducer.html 81 -instance Reducer (Maybe a) (Last a) where - unit = Last +instance Reducer a (First a) where + unit = First . Just hunk ./dist/doc/html/monoids/src/Data-Monoid-Reducer.html 84 -instance Measured v a => Monoid (FingerTree v a) where - mempty = empty - mappend = (><) - -instance Measured v a => Reducer a (FingerTree v a) where - unit = singleton - cons = (<|) - snoc = (|>) +instance Reducer (Maybe a) (Last a) where + unit = Last + +instance Reducer a (Last a) where + unit = Last . Just + +instance Measured v a => Monoid (FingerTree v a) where + mempty = empty + mappend = (><) + +instance Measured v a => Reducer a (FingerTree v a) where + unit = singleton + cons = (<|) + snoc = (|>) }