【发布时间】:2014-04-20 23:14:01
【问题描述】:
我发现自己在写这个:
and_then :: x -> Maybe [x] -> Maybe [x]
x `and_then` mxs = do
xs <- mxs
return (x:xs)
有没有更简单的方法来达到同样的目的?
基本上,这是处理列表的标准递归循环 - 除了处理可能失败(这与结果只是一个空列表不同)。这意味着我通常会写的地方
z : process xs ys
我现在要写了
z `and_then` process xs ys
由于这是一个相当常见的习语,我想知道是否有一些预先存在的功能可以帮助我。 (Hoogle 多次搜索都找不到与上述类型相似的任何函数。)
【问题讨论】:
-
fmap (x:) mxs怎么样? -
当然,Hoogle 只会告诉你一个函数是否有你想要的类型。它无法告诉您库函数的组合 是否可以完成这项工作... 建议将此作为一项新功能听起来很诱人,但我担心没有办法确切说明是什么代码用户想要一半的时间......