问题标签 [either]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
25933 浏览

scala - 使用 Either 处理 Scala 代码中的故障

Optionmonad 是在 Scala 中处理“有或无”事物的一种很好的表达方式。但是,如果在“什么都没有”发生时需要记录一条消息怎么办?根据 Scala API 文档,

Either 类型通常用作 scala.Option 的替代方案,其中 Left 表示失败(按照惯例),Right 类似于 Some。

但是,我没有运气找到使用 Either 的最佳实践或涉及 Either 处理故障的良好现实世界示例。最后,我为自己的项目提出了以下代码:

(请注意,这是一个真实项目的片段,所以它不会自行编译)

我很高兴知道您Either在代码中的使用方式和/或重构上述代码的更好想法。

0 投票
2 回答
890 浏览

haskell - 为什么这个 Either-monad 代码不进行类型检查?

'baby.hs' 中的这段代码片段导致了可怕的编译错误:


为什么会这样?我怎样才能使这段代码编译?感谢您的帮助~

我知道了。我调整了代码以查看它的编译:

它编译成功!但是......还有一个问题:

使'Either a'成为一个单子,我得到'return = Right'......我怎么能得到'return = Left'?我试过这个但失败了:

或:实例 Monad (\x -> 任一个 xa)

根本不编译!

0 投票
3 回答
18057 浏览

scala - 我如何处理返回的要么

如果一个scala函数是

处理返回结果的正确方法应该是什么? val a = A() 和 ?

0 投票
4 回答
5670 浏览

haskell - 没有标准的(任一)单子实例吗?

我的印象是某处有一个 Either a 的实例,但我似乎找不到它。我尝试导入 Control.Monad、Control.Monad.Instances 和 Data.Either,如图所示

但 ghc 告诉我它无法推断(Monad (Either a))。添加

使代码编译,但这个实例声明似乎很笼统,如果它不在某些标准模块中,对我来说没有意义。如果是,我应该在哪里找到它,如果不是,那么有什么原因吗?

- - - - - - - 编辑 - - - - - - - -

请注意,我现在认为下面 user31708 的答案(“从基础 4.6 开始,实例在 Data.Either 本身中。”)目前是正确的答案。我不确定在这种情况下重新分配所选答案的正确协议,其中所选答案是提出问题时的正确答案,所以我保持原样。请纠正我,如果有其他指导方针。

0 投票
4 回答
9389 浏览

haskell - 了解 Either 如何是 Functor 的实例

在我的空闲时间我正在学习 Haskell,所以这是一个初学者问题。

在我的阅读中,我遇到了一个示例,该示例说明了如何Either a制作以下实例Functor

现在,我试图理解为什么在Right值构造函数的情况下实现映射,但在Left?

以下是我的理解:

首先让我将上面的实例重写为

现在:

  1. 我知道fmap :: (c -> d) -> f c -> f d

  2. 如果我们fEither a我们代替fmap :: (c -> d) -> Either a c -> Either a d

  3. is 的类型和Right (g x)isEither a (g x)的类型,所以我们有 is 的类型g x,这是我们所期望的(参见上面的 2.)dRight (g x)Either a dfmap

  4. 现在,如果我们看一下,Left (g x)我们可以使用相同的推理来说它的类型是Either (g x) b,即Either d b,这不是我们所期望的fmap(参见上面的 2.):d应该是第二个参数,而不是第一个!所以我们不能映射过去Left

我的推理正确吗?

0 投票
1 回答
402 浏览

scala - Scala - 为紧凑性定义类型或显式编写它以提高可读性?

在 Scala 中,我可以拥有:

或者

前者对结果类型更明确,因此更易于阅读,但涉及在不同的实现中一遍又一遍地重新输入 Either[...]。这在后者中得到了解决,但读者乍一看无法对结果做出太多结论。

如果返回类型Option不是Either,我自然会坚持使用以前的版本。对于具有许多类型参数的更复杂的类型,第二个会更有益。Either是中场某处。

我的直觉是,从长远来看,后者更易于维护。你怎么看?有没有这方面的做法?

0 投票
4 回答
13007 浏览

haskell - 在 Haskell 中使用“任意”

我有两个值,t1t2,类型为Either String Type。-valueLeft用于错误处理。这些值在返回的函数中使用Either String Type

我想要做的是检查两者是否t1t2都是Right-values 和满足p :: Type -> Bool。如果他们这样做,我想返回Right (the type inside t1)。如果t1t2都是Right- 值,但不满足p,我想返回Left someString。如果其中一个t1ort2是一个Left值,我只想传递该值。

我怎样才能以优雅的方式做到这一点?我有一种预感,使用 Either 作为 monad 是正确的做法,但我不确定如何去做。

0 投票
9 回答
15367 浏览

scala - 将一个列表转换为一个列表的最佳方法?

我有一些类似下面的代码,我有一个列表,我想把它变成列表中的一个……特别是(在这种情况下),如果列表中有任何左,那么我返回a 列表的左侧,否则我返回权限列表的右侧。

打电话get总是让我觉得我一定错过了什么。

有没有更惯用的方法来做到这一点?

0 投票
1 回答
593 浏览

haskell - 尝试实现 Data.Either

为了帮助我学习 Applicative Functors 和 Functors,我认为看看如何Either使用 typeclassesFunctorApplicative. 显然我可以继续阅读代码,但我发现自己尝试实现事物以更好地理解事物更有用。

仅供参考,我正在尝试实现此演示文稿结果的 Haskell 版本http://applicative-errors-scala.googlecode.com/svn/artifacts/0.6/chunk-html/index.html

无论如何,这就是我到目前为止所拥有的

但是每当我尝试运行它时,ghci我都会收到以下错误消息:-

我不确定这是为什么,有人可以帮忙吗?

0 投票
5 回答
6705 浏览

haskell - 我可以问一个 Either 它是左(还是右)?

我知道我通常可以只进行模式匹配,但有时我会发现这些函数很有用:

标准库中有类似的东西吗?