list - 标准 Haskell 函数::(a -> Maybe a) -> a -> [a]

标签 list haskell option-type

我定义了一个函数

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

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

最佳答案

您的函数不在标准库中,因为它是 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 和其他标准函数来编写是笨拙的,所以我不确定为什么它也不在标准库中。

关于list - 标准 Haskell 函数::(a -> Maybe a) -> a -> [a],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13735336/

相关文章:

java - 如何设置推断类型列表 getter 和 setter?

haskell - Haskell 的箭头运算符的 'real' 名称是什么?

switch-statement - 可选 bool 值元组上的 Swift switch 语句

swift - 可选和展开

c# - 将列表元素分组到字典

c++ - 创建对象指针列表

lighttpd 上的 haskell fastCGI,需要配置帮助

haskell - 使用 haskell 投影 euler 25 的缓慢解决方案

java - JavaOptional 与 Map equals 实现不兼容吗?

java - 连接两个表 Mysql Java 并将其作为列表发送到 jsp