问题标签 [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.
scala - 使用 Either 处理 Scala 代码中的故障
Option
monad 是在 Scala 中处理“有或无”事物的一种很好的表达方式。但是,如果在“什么都没有”发生时需要记录一条消息怎么办?根据 Scala API 文档,
Either 类型通常用作 scala.Option 的替代方案,其中 Left 表示失败(按照惯例),Right 类似于 Some。
但是,我没有运气找到使用 Either 的最佳实践或涉及 Either 处理故障的良好现实世界示例。最后,我为自己的项目提出了以下代码:
(请注意,这是一个真实项目的片段,所以它不会自行编译)
我很高兴知道您Either
在代码中的使用方式和/或重构上述代码的更好想法。
haskell - 为什么这个 Either-monad 代码不进行类型检查?
'baby.hs' 中的这段代码片段导致了可怕的编译错误:
为什么会这样?我怎样才能使这段代码编译?感谢您的帮助~
我知道了。我调整了代码以查看它的编译:
它编译成功!但是......还有一个问题:
使'Either a'成为一个单子,我得到'return = Right'......我怎么能得到'return = Left'?我试过这个但失败了:
或:实例 Monad (\x -> 任一个 xa)
根本不编译!
scala - 我如何处理返回的要么
如果一个scala函数是
处理返回结果的正确方法应该是什么?
val a = A()
和 ?
haskell - 没有标准的(任一)单子实例吗?
我的印象是某处有一个 Either a 的实例,但我似乎找不到它。我尝试导入 Control.Monad、Control.Monad.Instances 和 Data.Either,如图所示
但 ghc 告诉我它无法推断(Monad (Either a))。添加
使代码编译,但这个实例声明似乎很笼统,如果它不在某些标准模块中,对我来说没有意义。如果是,我应该在哪里找到它,如果不是,那么有什么原因吗?
- - - - - - - 编辑 - - - - - - - -
请注意,我现在认为下面 user31708 的答案(“从基础 4.6 开始,实例在 Data.Either 本身中。”)目前是正确的答案。我不确定在这种情况下重新分配所选答案的正确协议,其中所选答案是提出问题时的正确答案,所以我保持原样。请纠正我,如果有其他指导方针。
haskell - 了解 Either 如何是 Functor 的实例
在我的空闲时间我正在学习 Haskell,所以这是一个初学者问题。
在我的阅读中,我遇到了一个示例,该示例说明了如何Either a
制作以下实例Functor
:
现在,我试图理解为什么在Right
值构造函数的情况下实现映射,但在Left
?
以下是我的理解:
首先让我将上面的实例重写为
现在:
我知道
fmap :: (c -> d) -> f c -> f d
如果我们
f
用Either a
我们代替fmap :: (c -> d) -> Either a c -> Either a d
is 的类型和
Right (g x)
isEither a (g x)
的类型,所以我们有 is 的类型g x
,这是我们所期望的(参见上面的 2.)d
Right (g x)
Either a d
fmap
现在,如果我们看一下,
Left (g x)
我们可以使用相同的推理来说它的类型是Either (g x) b
,即Either d b
,这不是我们所期望的fmap
(参见上面的 2.):d
应该是第二个参数,而不是第一个!所以我们不能映射过去Left
。
我的推理正确吗?
scala - Scala - 为紧凑性定义类型或显式编写它以提高可读性?
在 Scala 中,我可以拥有:
或者
前者对结果类型更明确,因此更易于阅读,但涉及在不同的实现中一遍又一遍地重新输入 Either[...]。这在后者中得到了解决,但读者乍一看无法对结果做出太多结论。
如果返回类型Option
不是Either
,我自然会坚持使用以前的版本。对于具有许多类型参数的更复杂的类型,第二个会更有益。Either
是中场某处。
我的直觉是,从长远来看,后者更易于维护。你怎么看?有没有这方面的做法?
haskell - 在 Haskell 中使用“任意”
我有两个值,t1
和t2
,类型为Either String Type
。-valueLeft
用于错误处理。这些值在返回的函数中使用Either String Type
。
我想要做的是检查两者是否t1
和t2
都是Right
-values 和满足p :: Type -> Bool
。如果他们这样做,我想返回Right (the type inside t1)
。如果t1
和t2
都是Right
- 值,但不满足p
,我想返回Left someString
。如果其中一个t1
ort2
是一个Left
值,我只想传递该值。
我怎样才能以优雅的方式做到这一点?我有一种预感,使用 Either 作为 monad 是正确的做法,但我不确定如何去做。
scala - 将一个列表转换为一个列表的最佳方法?
我有一些类似下面的代码,我有一个列表,我想把它变成列表中的一个……特别是(在这种情况下),如果列表中有任何左,那么我返回a 列表的左侧,否则我返回权限列表的右侧。
打电话get
总是让我觉得我一定错过了什么。
有没有更惯用的方法来做到这一点?
haskell - 尝试实现 Data.Either
为了帮助我学习 Applicative Functors 和 Functors,我认为看看如何Either
使用 typeclassesFunctor
和Applicative
. 显然我可以继续阅读代码,但我发现自己尝试实现事物以更好地理解事物更有用。
仅供参考,我正在尝试实现此演示文稿结果的 Haskell 版本http://applicative-errors-scala.googlecode.com/svn/artifacts/0.6/chunk-html/index.html
无论如何,这就是我到目前为止所拥有的
但是每当我尝试运行它时,ghci
我都会收到以下错误消息:-
我不确定这是为什么,有人可以帮忙吗?
haskell - 我可以问一个 Either 它是左(还是右)?
我知道我通常可以只进行模式匹配,但有时我会发现这些函数很有用:
标准库中有类似的东西吗?