3

我定义了一个函数

maybeToList :: (a -> Maybe a) -> a -> [a]
maybeToList f x = x : maybe [] (maybeToList f) (f x)

这个功能看起来很明显,我不敢相信它不是标准的。它是否在某个模块中定义(我已经检查过 Data.Maybe)?

4

1 回答 1

6

您的函数不在标准库中,因为它是以下函数的一种特殊形式

unfoldr      :: (b -> Maybe (a, b)) -> b -> [a]
unfoldr f b  =
  case f b of
   Just (a,new_b) -> a : unfoldr f new_b
   Nothing        -> []

也就是说,列表元素与种子值序列相同的情况很常见,并且在 justunfoldr和其他标准函数方面编写起来很笨拙,所以我不确定为什么它不在标准库中也是如此.

于 2012-12-06T01:16:21.953 回答