我知道我可以通常只是模式匹配,但有时候我会发现这些功能很有用:我可以问一个是否它是左(或右)?
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