题
有时我发现自己预设电台模式“如果布尔是不是假”或“如果列表不为空使用它,否则使用别的东西。”
我要寻找的布尔和列出在“可能”的功能是什么也许功能。是否有任何?
更新:我的意思是使用布尔例作为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
[]
实例。
不隶属于 StackOverflow