有时我发现自己预设电台模式“如果布尔是不是假”或“如果列表不为空使用它,否则使用别的东西。”

我要寻找的布尔和列出在“可能”的功能是什么也许功能。是否有任何?

更新:我的意思是使用布尔例作为List的情况下的概括。例如用Data.Text工作时作为T:

if T.null x then x else foo x

我期待减少这种锅炉板代码。

有帮助吗?

解决方案

我想答案可能是不存在这样的通用功能。作为DJV说,你或许可以建立在Data.Monoid写一个,是这样的:

maybe' :: (Eq a, Monoid a) => b -> (a -> b) -> a -> b
maybe' repl f x = if x == mempty then repl else f x

但我不知道的在这样的标准库的任何函数(或任何其可以很容易地组合在一起这样做)。

其他提示

也许是的也许键入catamorphism。

foldr相似是列表类型的catamorphism。

如果您已经可以用于像:maybe x (const y)

您可以使用:foldr (const (const y)) x

有关BOOL I也将失去catamorphism在标准库,但是这将是:

bool :: a -> a -> Bool -> a
bool t _ True = t
bool _ f False = f

检查 Data.Monoid ,这说明其中有一个指定的空值,你可以在上面模式匹配来写你的泛型函数的数据类型的类型类。有用于与空值Bool以及用于与空值False List []实例。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top