我知道我通常可以只进行模式匹配,但有时我会发现这些函数很有用:
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
如果给定值是左值,则返回 True,否则返回 False。
isRight :: Either a b -> Bool
如果给定值是右值,则返回 True,否则返回 False。
正如人们一直指出的那样,标准库中没有这样的功能,您可以通过各种方式实现自己的功能。
但是,请注意“X 在标准库中吗?”形式的问题。Hoogle最容易回答,因为即使您不知道函数的名称,您也可以通过它的类型搜索它。
Hoogle 也很聪明,知道参数顺序无关紧要,它还会显示类型与您搜索的类型相似(例如更通用)的结果。
在这种情况下,搜索Either a b -> Bool
不会产生任何有希望的匹配项,因此这是一个很好的指标,表明它在标准库中不存在。
不,但你可以写:
import Data.Either
isLeft = null . rights . return
isRight = null . lefts . return
不,没有,afaik。
但是您可以更轻松地定义这些函数*:
isLeft (Left _) = True
isLeft _ = False
当然,同样如此isRight
。
编辑:*好吧,我想这是否更容易是有争议的,因为它需要更多的代码行......
据我所知,标准库中没有这样的东西。但是,您可以轻松地自己定义它。
either l _ (Left a) = l a
either _ r (Right b) = r b
isLeft (Left _) = True
isLeft _ = False
isRight (Right _) = True
isRight _ = False