首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多个Either<上绑定,>?

如何在多个Either<上绑定,>?
EN

Stack Overflow用户
提问于 2020-05-06 06:26:02
回答 1查看 580关注 0票数 0

我有两个函数返回Either<Error,?>,第二个函数依赖于第一个函数。

代码语言:javascript
复制
Either<Error, bool> either1 = ReturnEither1(...);
Either<Error, int> either2 = either1.Bind(ReturnEither2);

现在,我有一个依赖于either1either2的第三个函数,它的左边类型也是Error。我怎么能做下面这样的事呢?

代码语言:javascript
复制
Either<Error, MyType> either3 = [either1, either2].BindAll(...);

所以我希望either3绑定到either1either2的右边。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-06 09:51:20

您不可能轻松地拥有一些BindAll,因为您将失去类型安全性(MyType与单个返回类型)。如果您真的认为您需要这样的东西,我想您可以在函数枚举上使用Fold构建一些东西。

为了满足您的需要,我更喜欢C#中的LINQ语法:

代码语言:javascript
复制
var result = from x1 in ReturnEither1()
             from x2 in ReturnEither2(x1)
             from x3 in ReturnEither3(x1, x2) // you can use any of the previous results
             select x3;

这将调用一元类型的SelectMany,即Bind (参见LanguageExt文档)。如果每个函数都返回右,则得到一个右值--否则,得到第一个左值(第一个错误)。

结果将是类似于ReturnEither3的返回值的任何类型。所有单个函数(ReturnEither*)都需要相同的左类型,但可以有不同的右类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61628720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档