是否有一个标准的Haskell函数,比如迭代,什么都没有停止?

时间:2016-03-02 14:00:10

标签: haskell standard-library haskell-platform

我想知道是否有一个标准函数迭代一个函数,该函数返回一个(Maybe值)超过一个初始值,收集列表中的值,但是当它到达Nothing时结束列表。例如,可以实现此功能:

iterateMaybe f a = a : iterMaybe (f a) where
  iterMaybe Nothing = []
  iterMaybe (Just a) = a : iterMaybe (f a)

或略有不同:

iterateMaybe' f Nothing = []
iterateMaybe' f (Just a) = a : iterateMaybe' f (f a)

the functions that Hoogle finds没有匹配。

1 个答案:

答案 0 :(得分:13)

这是unfoldr的一个特例。

iterateMaybe f = unfoldr (fmap (\s -> (s,s)) . f)

区别在于unfoldr返回的列表不包括初始元素。