module Data.UtilInternal
(
traverseWithKey_,
Traverse_(..)
)
where
import Control.Applicative
import Control.Monad (void)
import Data.Monoid (Monoid(..))
import qualified Data.Map as M
newtype Traverse_ f = Traverse_ { runTraverse_ :: f () }
instance Applicative f => Monoid (Traverse_ f) where
mempty = Traverse_ (pure ())
Traverse_ a `mappend` Traverse_ b = Traverse_ (a *> b)
traverseWithKey_ :: Applicative f => (k -> a -> f ()) -> M.Map k a -> f ()
traverseWithKey_ f = runTraverse_ .
myfoldMapWithKey (\k x -> Traverse_ (void (f k x)))
myfoldMapWithKey :: Monoid r => (k -> a -> r) -> M.Map k a -> r
myfoldMapWithKey f = getConst . M.traverseWithKey (\k x -> Const (f k x))