Работает на двух Либо - PullRequest
       66

Работает на двух Либо

1 голос
/ 22 марта 2020

Предположим, у вас есть следующий код:

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);

Сочетание addOne с func1 или func2 относительно просто:

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

но как можно позвонить add используя func1 и func2 в качестве аргументов?

ps Я знаю, что ramda предлагает функцию add. Рассмотрим пример как абстракцию проблемы реального мира.

1 Ответ

4 голосов
/ 22 марта 2020

Вы, вероятно, ищете функцию lift2 :

const addEithers = S.lift2(add)

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

В качестве альтернативы вы можете использовать ap:

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