对两个 Either 进行操作

Operating on two Eithers

假设您有以下代码:

import R from "ramda";
import S from "sanctuary";
import { Left, Right } from "sanctuary-either";

const add = R.curry((p1, p2) => p1 + p2);
const addOne = add(1);

const func1 = () => Right(2);
const func2 = () => Right(7);

addOnefunc1func2 结合起来相对容易:

const res = R.compose(
  S.map(addOne),
  func1
)(); 

但是如何使用 func1func2 作为参数调用 add

p.s。我知道 ramda 提供了一个 add 函数。将示例视为现实世界问题的抽象。

您可能正在寻找 lift2 function:

const addEithers = S.lift2(add)

console.log(addEithers(func1())(func2()))

或者,您可以使用 ap:

S.ap(S.map(add)(func1()))(func2())