[documentation ekmett@gmail.com**20090327001701] { hunk ./dist/doc/html/monoids/Data-Monoid-Generator-Combinators.html 523 +>
find :: Generator c => (Elem c -> Bool) -> c -> Maybe (Elem c)Source
findData.Monoid.Generator.Combinators ) 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 . (==) - -notElem :: (Generator c, Eq (Elem c)) => Elem c -> c -> Bool -notElem x = not . elem x - -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 + , find + ) 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 . (==) + +notElem :: (Generator c, Eq (Elem c)) => Elem c -> c -> Bool +notElem x = not . elem x + +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-Reducer-Sugar.html 17 -import Data.Monoid.Generator -import Data.Monoid.Reducer - -fromInteger :: Reducer Integer m => Integer -> m -fromInteger = unit - -class IsString a where - fromString :: String -> a - -instance Reducer Char a => IsString a where - fromString = reduce +import GHC.Exts hiding (IsString, fromString) +import Data.Monoid.Generator +import Data.Monoid.Reducer + +fromInteger :: Reducer Integer m => Integer -> m +fromInteger = unit + +class IsString a where + fromString :: String -> a + +instance Reducer Char a => IsString a where + fromString = reduce }