HLint предлагает использовать forM_
вместо forM
. Зачем? Я вижу, что у них разные подписи типов, но они не нашли веских оснований для использования друг друга.
forM :: (Traversable t, Monad m) => t a -> (a -> m b) -> m (t b)
forM_ :: (Foldable t, Monad m) => t a -> (a -> m b) -> m ()