我能问一下它是左(还是右)?

时间:2011-08-27 08:32:42

标签: haskell either

我知道我通常只能进行模式匹配,但有时候我会觉得这些函数很有用:

isLeft  = either (const True) (const False)
isRight = either (const False) (const True)

标准库中有类似内容吗?

5 个答案:

答案 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