我有一个更高阶的功能:让我们说简单
const divideLeftToRight = x => y => x/y;
我想有一个执行除法的功能,但是从“从右到左”。换句话说,我需要:
const divideRightToLeft = x => y => y/x;
我想过:
const divideRightToLeft = R.curry((x,y) => divideLeftToRight(y)(x));
我想知道是否有更优雅的方式来做到这一点
答案 0 :(得分:5)
您正在寻找flip
function:
const divideRightToLeft = R.flip(divideLeftToRight)
答案 1 :(得分:1)
您可以在翻转之前取消使用该功能。 (flip
返回一个咖喱函数。)
例如
const divideRightToLeft = R.flip(R.uncurryN(2, divideLeftToRight))
或者,您可以定义自定义flipCurried
函数:
// https://github.com/gcanti/fp-ts/blob/15f4f701ed2ba6b0d306ba7b8ca9bede223b8155/src/function.ts#L127
const flipCurried = <A, B, C>(fn: (a: A) => (b: B) => C) => (b: B) => (a: A) => fn(a)(b);
const divideRightToLeft = flipCurried(divideLeftToRight)