我知道我可以通常只是模式匹配,但有時候我會發現這些功能很有用:我可以問一個是否它是左(或右)?
isLeft = either (const True) (const False)
isRight = either (const False) (const True)
有沒有這樣的事情在標準庫?
我知道我可以通常只是模式匹配,但有時候我會發現這些功能很有用:我可以問一個是否它是左(或右)?
isLeft = either (const True) (const False)
isRight = either (const False) (const True)
有沒有這樣的事情在標準庫?
雖然這是相當古老,張貼在這裏作爲參考。
這是現在在Data.Either
下的標準庫,因爲4.7:
https://hackage.haskell.org/package/base-4.7.0.0/docs/Data-Either.html
isLeft :: Either a b -> Bool
返回真,如果給定的值是一個左值,否則假。如果給定的值是右值,否則假
isRight :: Either a b -> Bool
返回true。
不,沒有,afaik。
但是你可以定義這些功能更容易*:
isLeft (Left _) = True
isLeft _ = False
也是如此isRight
,當然。
編輯:*好吧,我想這是值得商榷的,如果說得容易與否,因爲它需要更多的代碼...
沒有,但你可以寫:
import Data.Either
isLeft = null . rights . return
isRight = null . lefts . return
可能是因爲它是定義函數的非直接方式。根據「任一」或使用模式匹配的定義可能會更容易理解。 –
可能。對於'Either'幾乎沒有什麼功能可用,我有點失望,因爲沒有太多的工作要做。我會至少期待'leftMaybe ::或者b - >也許a''和它的副本。 – Landei
至於我知道,標準庫中沒有這樣的東西。但是,您可以輕鬆定義它。
either l _ (Left a) = l a
either _ r (Right b) = r b
isLeft (Left _) = True
isLeft _ = False
isRight (Right _) = True
isRight _ = False
OP希望知道'isLeft'和'isRight'是否在標準庫中名稱不同。他知道他已經可以用標準庫中的「任一」來定義它們。 – dave4420
我爲此+1了,因爲相似的答案沒有-1。他也回答了這個問題。 – alternative
正如人們已經指出,有標準庫沒有這樣的功能,你可以通過多種方式實現自己的。
但是,請注意形式爲的問題「標準庫中是X嗎?」最容易被Hoogle回答,因爲即使您不知道名稱的某個功能,您可以通過其類型進行搜索。
Hoogle也很聰明,知道參數順序無關緊要,並且還會顯示類型與搜索類型相似(例如更一般)的結果。
在這種情況下,搜索Either a b -> Bool
does not yield any promising matches,這是一個很好的指標,它不存在於標準庫中。
Hoogle的建議仍然很好,但請注意,標準庫* does *現在具有這樣的功能;看[這個問題的其他答案](http://stackoverflow.com/a/24046158/1126841)。 – chepner
我認爲@ pyrospade的應該是現在接受的答案。 – SwiftsNamesake