对两个 Either 进行操作

ant*_*iom 1 javascript functional-programming ramda.js fantasyland sanctuary

假设您有以下代码:

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);
Run Code Online (Sandbox Code Playgroud)

addOnefunc1or结合起来func2相对容易:

const res = R.compose(
  S.map(addOne),
  func1
)(); 
Run Code Online (Sandbox Code Playgroud)

但是如何add使用func1andfunc2作为参数进行调用呢?

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

Ber*_*rgi 5

您可能正在寻找该lift2功能

const addEithers = S.lift2(add)

console.log(addEithers(func1())(func2()))
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用ap

S.ap(S.map(add)(func1()))(func2())
Run Code Online (Sandbox Code Playgroud)

  • 是的,[`Either` 实现了 `Apply`](https://github.com/sanctuary-js/sanctuary-either/tree/v2.1.0)。我想在 Sanctuary 中柯里化不是可选的,并且需要进行两次调用而不是传递两个参数?请参阅编辑。 (2认同)