stack-9.9.9: src/Data/Set/Monad.hs
-- | Monadic operations for 'Set'.
module Data.Set.Monad
(mapM
,mapM_
,filterM)
where
import Control.Monad (liftM)
import qualified Control.Monad as L
import Data.Set (Set)
import qualified Data.Set as S
import Prelude hiding (mapM,mapM_)
-- | Map over a 'Set' in a monad.
mapM :: (Ord a,Ord b,Monad m)
=> (a -> m b) -> Set a -> m (Set b)
mapM f = liftM S.fromList . L.mapM f . S.toList
-- | Map over a 'Set' in a monad, discarding the result.
mapM_ :: (Ord a,Ord b,Monad m)
=> (a -> m b) -> Set a -> m ()
mapM_ f = L.mapM_ f . S.toList
-- | Filter elements of a 'Set' in a monad.
filterM :: (Ord a,Monad m)
=> (a -> m Bool) -> Set a -> m (Set a)
filterM f = liftM S.fromList . L.filterM f . S.toList