-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Functions that could be added to Data.Set.
--   
--   Functions that could be added to Data.Set.
@package set-extra
@version 1.4.1

module Data.Set.ExtraG
gFind :: forall a b. (Data a, Typeable b, Ord b) => a -> Set b

module Data.Set.Extra
mapM :: (Monad m, Ord b) => (a -> m b) -> Set a -> m (Set b)
mapM_ :: (Monad m, Ord b) => (a -> m b) -> Set a -> m ()
filterM :: (Ord a, Monad m) => (a -> m Bool) -> Set a -> m (Set a)
catMaybes :: Ord a => Set (Maybe a) -> Set a
mapMaybe :: (Ord a, Ord b) => (a -> Maybe b) -> Set a -> Set b
flatten :: Ord a => Set (Set a) -> Set a
concatMap :: (Ord a, Ord b) => (a -> Set b) -> Set a -> Set b
concatMapM :: (Monad m, Ord a, Ord b) => (a -> m (Set b)) -> Set a -> m (Set b)
any :: Ord a => (a -> Bool) -> Set a -> Bool
all :: Ord a => (a -> Bool) -> Set a -> Bool
or :: Set Bool -> Bool
and :: Set Bool -> Bool

-- | Create a singleton set containing a singleton set of a.
ss :: Ord a => a -> Set (Set a)

-- | Turn a list of lists into a set of sets.
toSS :: Ord a => [[a]] -> Set (Set a)
fromSS :: Ord a => Set (Set a) -> [[a]]
ssMapM :: (Monad m, Ord a, Ord b) => (a -> m b) -> Set (Set a) -> m (Set (Set b))

-- | distrib {a, b, c} {d, e, f} -> {a+d, a+e, a+f, b+d, b+e, b+f, c+d,
--   c+e, c+f}
distrib :: Ord a => Set (Set a) -> Set (Set a) -> Set (Set a)

-- | Calculate the Cartesian product of two sets.
--   
--   
--   cartesianProduct xs ys = fromList $ liftA2 (,) (toList xs) (toList ys)
--   
--   
--   Example:
--   
--   
--   cartesianProduct (fromList [1,2]) (fromList [a,b]) =
--     fromList [(1,a), (1,b), (2,a), (2,b)]
--   
cartesianProduct :: () => Set a -> Set b -> Set (a, b)
groupBy :: (Ord a, Ord b) => (a -> b) -> Set a -> Map b (Set a)
powerset :: Ord a => Set a -> Set (Set a)
partitionM :: (Monad m, Ord a) => (a -> m Bool) -> Set a -> m (Set a, Set a)
unzip :: (Ord a, Ord b) => Set (a, b) -> (Set a, Set b)
gFind :: forall a b. (Data a, Typeable b, Ord b) => a -> Set b
