【发布时间】:2015-10-20 03:55:28
【问题描述】:
解释“重复”
有人指出Is this a case for foldM? 可能是重复的。现在,我强烈认为,可以用相同答案回答的两个问题不一定是重复的! “什么是 1 - 2”和“什么是 i^2”都产生“-1”,但不,它们不是重复的问题。我的问题(已经回答了,有点)是关于“函数iterateM 是否存在于 Haskell 标准库中”,而不是“如何实现链式 monad 动作”。
问题
当我写一些项目时,我发现自己在写这个组合器:
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 搜索和一些谷歌搜索,但没有找到“标准”Haskell 附带的任何内容。有这样预定义的正式函数吗?
【问题讨论】:
-
我也没有在任何 common 包中找到它 - 但Hayoo 至少知道 2 个地方 - 在这种情况下我会复制我猜它(也许
chainM是一个更好的名字 -replicate是 given) -
replicateM是否输入了上一个结果? -
不,它没有——但如果我阅读重复或复制,我会想到不同的东西(仅出于这个原因)——这实际上只是对命名的评论——如果造成误解,抱歉
-
@Carsten,你的评论启发了我的回答。
-
@dfeuer 我不知道 - 我只是搜索了签名并快速浏览了一下 - 我非常喜欢你的;)