Javascript Ramda currying:如何将参数应用于多个参数

Javascript Ramda currying:如何将参数应用于多个参数,javascript,ramda.js,Javascript,Ramda.js,我有一种情况需要这样做: const f = (obj) => assoc('list', createList(obj), obj) 由于我需要第二个和第三个参数的参数,因此禁止我执行以下操作: const f = assoc('list', somehowGetObj()) 我也试过这个,但没用: const f = assoc('list', createList(__)) const f = converge(assoc, [createList, identity]) 有没

我有一种情况需要这样做:

const f = (obj) => assoc('list', createList(obj), obj)
由于我需要第二个和第三个参数的参数,因此禁止我执行以下操作:

const f = assoc('list', somehowGetObj())
我也试过这个,但没用:

const f = assoc('list', createList(__))
const f = converge(assoc, [createList, identity])
有没有一种正确的方法可以通过咖喱来实现这一点?

另一种方法是

const f = converge(assoc('list'), [createList, identity])
chain(createList, assoc('list'))
您可以在上看到它的作用

更新

为了进一步解释这是如何工作的,我将使用下一个版本的Ramda:

chain(assoc('list'), createList)
要显示它如何匹配当前签名,请执行以下操作:

chain :: Chain m => (a -> m b) -> m a -> m b
Ramda将函数视为,因此也将函数视为。因此,要专门化上述函数,我们必须

chain :: (a -> Function x b) -> Function x a -> Function x -> b
但是
函数xy
可以更简单地写成
x->y
,因此上面可以更简单地写成

chain :: (a -> x -> b) -> (x -> a) -> (x -> b)
然后您可以使用以下(专用)类型:

因此

chain(assoc('list'), createList) :: OriginalData -> EnhancedData    (x -> b)

它起作用了!尽管如此,这个用例似乎没有包含在文档中,或者我遗漏了什么?你说得对。Ramda的文档与代码不匹配。文档化的签名是所需要的,并使代码匹配。如果使用下一版本的Ramda,则必须反转参数:
chain(assoc('list'),createList)
chain(assoc('list'), createList) :: OriginalData -> EnhancedData    (x -> b)