有時候我發現自己正在編制模式「如果Bool不是假的」或者「如果列表不是空的使用它,否則使用別的東西」。Bool和List的「可能」類似的函數?
我要尋找的布爾認爲是「可能」的功能是什麼也許和功能列表。有沒有?
更新:我的意思是使用布爾情況作爲列表的情況下的推廣。例如,當使用Data.Text作爲T時:
if T.null x then x else foo x
我在尋找減少這種鍋爐板代碼。
有時候我發現自己正在編制模式「如果Bool不是假的」或者「如果列表不是空的使用它,否則使用別的東西」。Bool和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
但我不喜歡的標準庫知道任何函數(或任何可以很容易地組合在一起這樣做)。
檢查Data.Monoid,這說明其中有一個指定的空值,你可以在上面模式匹配來寫你的泛型函數的數據類型的類型類。沒有與空值False
和List
空值[]
爲Bool
實例。
也許是Maybe類型的變形。
foldr相似的是列表類型的catamorphism。
如果你有可能使用這樣的:maybe x (const y)
你可以使用:foldr (const (const y)) x
對於布爾我也想念在標準庫的catamorphism,但它是:
bool :: a -> a -> Bool -> a
bool t _ True = t
bool _ f False = f
['bool'](http://hackage.haskell.org/package/base-4.8.0.0/docs/Data-Bool.html#v:bool)函數存在在最近的'base'軟件包中。 – 2015-05-28 11:27:19
請提供一個關於Bool的函數的例子... – kennytm 2010-10-01 09:01:06