List 标准Haskell函数::(a->;可能是a)->;a->;[a]

List 标准Haskell函数::(a->;可能是a)->;a->;[a],list,haskell,maybe,List,Haskell,Maybe,我定义了一个函数 maybeToList :: (a -> Maybe a) -> a -> [a] maybeToList f x = x : maybe [] (maybeToList f) (f x) 这个函数看起来很明显,我不敢相信它不是标准的。 它是在某个模块中定义的(我已经检查了数据。可能)?您的函数不在标准库中,因为它是以下函数的一种特殊形式: 也就是说,列表元素与种子值序列相同的情况很常见,而且仅在展开器和其他标准函数中编写是很笨拙的,所以我不确定为什么它也不

我定义了一个函数

maybeToList :: (a -> Maybe a) -> a -> [a]
maybeToList f x = x : maybe [] (maybeToList f) (f x)
这个函数看起来很明显,我不敢相信它不是标准的。
它是在某个模块中定义的(我已经检查了数据。可能)?

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


也就是说,列表元素与种子值序列相同的情况很常见,而且仅在
展开器
和其他标准函数中编写是很笨拙的,所以我不确定为什么它也不在标准库中。

谢谢你,尽管我认为定义一个函数可能比编写
unbover(join(,).foo)
更清楚:p.
maybeToList
不是最好的名称,因为在
数据中已经有一个同名函数。Maybe
,即
maybeToList=Maybe[](:[])
<代码>展开流或者什么?
unfoldr      :: (b -> Maybe (a, b)) -> b -> [a]
unfoldr f b  =
  case f b of
   Just (a,new_b) -> a : unfoldr f new_b
   Nothing        -> []