我有两个函数返回Either<Error,?>,第二个函数依赖于第一个函数。
Either<Error, bool> either1 = ReturnEither1(...);
Either<Error, int> either2 = either1.Bind(ReturnEither2);现在,我有一个依赖于either1和either2的第三个函数,它的左边类型也是Error。我怎么能做下面这样的事呢?
Either<Error, MyType> either3 = [either1, either2].BindAll(...);所以我希望either3绑定到either1和either2的右边。
发布于 2020-05-06 09:51:20
您不可能轻松地拥有一些BindAll,因为您将失去类型安全性(MyType与单个返回类型)。如果您真的认为您需要这样的东西,我想您可以在函数枚举上使用Fold构建一些东西。
为了满足您的需要,我更喜欢C#中的LINQ语法:
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*)都需要相同的左类型,但可以有不同的右类型。
https://stackoverflow.com/questions/61628720
复制相似问题