我知道我通常只能进行模式匹配,但有时候我会觉得这些函数很有用:
isLeft = either (const True) (const False)
isRight = either (const False) (const True)
标准库中有类似内容吗?
答案 0 :(得分:21)
虽然这已经很久了,但请在此处发帖以供参考。
现在,自4.7以来Data.Either
下的标准库
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。
答案 1 :(得分:13)
正如人们一直指出的那样,标准库中没有这样的功能,你可以通过各种方式实现自己的功能。
但请注意,{{3>}表格“是标准库中的X?”的问题最容易回答,因为即使您不知道函数的名称,您可以通过 type 搜索它。
Hoogle也足够聪明,知道参数顺序无关紧要,并且它还会显示类型与搜索类型相似(例如更通用)的结果。
在这种情况下,搜索Either a b -> Bool
Hoogle,这样就可以很好地指示它在标准库中不存在。
答案 2 :(得分:5)
不,但你可以写:
import Data.Either
isLeft = null . rights . return
isRight = null . lefts . return
答案 3 :(得分:3)
不,没有,afaik。
但您可以更轻松地定义这些功能*:
isLeft (Left _) = True
isLeft _ = False
同样适用于isRight
。
编辑:*好吧,我想如果这更容易或者更容易争辩,因为它需要更多的代码......
答案 4 :(得分:2)
据我所知,标准库中没有这样的东西。但是,您可以轻松地自己定义它。
either l _ (Left a) = l a
either _ r (Right b) = r b
isLeft (Left _) = True
isLeft _ = False
isRight (Right _) = True
isRight _ = False