2011-08-27 26 views

回答

3

不,沒有,afaik。

但是你可以定義這些功能更容易*:

isLeft (Left _) = True 
isLeft _  = False 

也是如此isRight,當然。

編輯:*好吧,我想這是值得商榷的,如果說得容易與否,因爲它需要更多的代碼...

5

沒有,但你可以寫:

import Data.Either 

isLeft = null . rights . return 
isRight = null . lefts . return 
+2

可能是因爲它是定義函數的非直接方式。根據「任一」或使用模式匹配的定義可能會更容易理解。 –

+0

可能。對於'Either'幾乎沒有什麼功能可用,我有點失望,因爲沒有太多的工作要做。我會至少期待'leftMaybe ::或者b - >也許a''和它的副本。 – Landei

2

至於我知道,標準庫中沒有這樣的東西。但是,您可以輕鬆定義它。

either l _ (Left a) = l a 
either _ r (Right b) = r b 

isLeft (Left _) = True 
isLeft _  = False 

isRight (Right _) = True 
isRight _   = False 
+2

OP希望知道'isLeft'和'isRight'是否在標準庫中名稱不同。他知道他已經可以用標準庫中的「任一」來定義它們。 – dave4420

+3

我爲此+1了,因爲相似的答案沒有-1。他也回答了這個問題。 – alternative

13

正如人們已經指出,有標準庫沒有這樣的功能,你可以通過多種方式實現自己的。

但是,請注意形式爲的問題「標準庫中是X嗎?」最容易被Hoogle回答,因爲即使您不知道名稱的某個功能,您可以通過其類型進行搜索。

Hoogle也很聰明,知道參數順序無關緊要,並且還會顯示類型與搜索類型相似(例如更一般)的結果。

在這種情況下,搜索Either a b -> Booldoes not yield any promising matches,這是一個很好的指標,它不存在於標準庫中。

+1

Hoogle的建議仍然很好,但請注意,標準庫* does *現在具有這樣的功能;看[這個問題的其他答案](http://stackoverflow.com/a/24046158/1126841)。 – chepner

相關問題