packages feed

hmt-0.18: Music/Theory/Monad.hs

-- | Monad functions.
module Music.Theory.Monad where

-- | 'sequence_' of 'repeat'.
repeatM_ :: Monad m => m a -> m ()
repeatM_ = sequence_ . repeat

-- | Monadic variant of 'iterate'.
iterateM_ :: Monad m => (st -> m st) -> st -> m ()
iterateM_ f st = do
  st' <- f st
  iterateM_ f st'

-- | 'fmap' of 'concat' of 'mapM'
concatMapM :: Monad m => (t -> m [u]) -> [t] -> m [u]
concatMapM f = fmap concat . mapM f

-- | If i then j else k.
m_if :: Monad m => (m Bool,m t,m t) -> m t
m_if (i,j,k) = do
  r <- i
  if r then j else k