2010-10-01 68 views
5

有時候我發現自己正在編制模式「如果Bool不是假的」或者「如果列表不是空的使用它,否則使用別的東西」。Bool和List的「可能」類似的函數?

我要尋找的布爾認爲是「可能」的功能是什麼也許和功能列表。有沒有?

更新:我的意思是使用布爾情況作爲列表的情況下的推廣。例如,當使用Data.Text作爲T時:

if T.null x then x else foo x 

我在尋找減少這種鍋爐板代碼。

+1

請提供一個關於Bool的函數的例子... – kennytm 2010-10-01 09:01:06

回答

4

我想答案可能是不存在這樣的通用功能。作爲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 

但我不喜歡的標準庫知道任何函數(或任何可以很容易地組合在一起這樣做)。

3

檢查Data.Monoid,這說明其中有一個指定的空值,你可以在上面模式匹配來寫你的泛型函數的數據類型的類型類。沒有與空值FalseList空值[]Bool實例。

6

也許是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 
+2

['bool'](http://hackage.haskell.org/package/base-4.8.0.0/docs/Data-Bool.html#v:bool)函數存在在最近的'base'軟件包中。 – 2015-05-28 11:27:19

相關問題