
Considering these naming conventions: http://haskell.org/ghc/docs/latest/html/libraries/base/Control-Monad.html#3 • A postfix 'M' always stands for a function in the Kleisli category: The monad type constructor m is added to function results (modulo currying) and nowhere else. So, for example, filter :: (a -> Bool) -> [a] -> [a] filterM :: (Monad m) => (a -> m Bool) -> [a] -> m [a] • A postfix '_' changes the result type from (m a) to (m ()). Thus, for example: sequence :: Monad m => [m a] -> m [a] sequence_ :: Monad m => [m a] -> m () • A prefix 'm' generalizes an existing function to a monadic form. Thus, for example: sum :: Num a => [a] -> a msum :: MonadPlus m => [m a] -> m a replicateM has the following type: replicateM :: Monad m => Int -> m a -> m [a] Am I missing something or should this have been called mreplicate? greetings, -- Sjoerd Visscher sjoerd@w3future.com