Объясните "дубликат"
Кто-то указывает на Это случай для foldM? как возможный дубликат. Теперь у меня есть сильное мнение, что два вопроса, на которые можно ответить одинаковыми ответами, не обязательно дублируются! "Что такое 1 - 2" и "Что такое я ^ 2", оба дают "-1", но нет, это не повторяющиеся вопросы. Мой вопрос (который уже ответил, вроде) касался "существует ли функция iterateM
в стандартной библиотеке Haskell", а не "Как реализовать прикованное действие монады".
Вопрос
Когда я пишу некоторые проекты, я обнаружил, что писал этот комбинатор:
repeatM :: Monad m => Int -> (a -> m a) -> a -> m a
repeatM 0 _ a = return a
repeatM n f a = (repeatM (n-1) f) =<< f a
Он просто выполняет монадическое действие n
раз, подавая предыдущий результат в следующее действие. Я пробовал поиск hoogle
и некоторые поисковые запросы Google, и не нашел ничего, что поставляется с "стандартным" Haskell. Существует ли такая формальная функция, которая предопределена?