added strict mapM, forM