2011-08-27 60 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

相关问题