我有一个定义的函数
maybeToList :: (a -> Maybe a) -> a -> [a]
maybeToList f x = x : maybe [] (maybeToList f) (f x)
这个功能看起来很明显,我不敢相信它不标准。 它是否在某个模块中定义(我已经检查过Data.Maybe)?
答案 0 :(得分:6)
您的功能不在标准库中,因为它是one that is的专用形式:
unfoldr :: (b -> Maybe (a, b)) -> b -> [a]
unfoldr f b =
case f b of
Just (a,new_b) -> a : unfoldr f new_b
Nothing -> []
也就是说,列表元素与种子值序列相同的情况很常见,只用unfoldr
和其他标准函数来编写是笨拙的,所以我不知道为什么它也不在标准库中。