Using Ramda, and pointfree style, how can I copy t

2019-03-02 11:17发布

问题:

I want to take an array [1, 2, 3] and return [1, 2, 3, 1].

I'm using Ramda, and I can get the desired result like this:

const fn = arr => R.append(R.prop(0, arr), arr);

But I'd like to do it point-free. Here's the closest I've gotten:

const fn = R.compose(R.append, R.prop(0));

fn(arr)(arr)

But that looks silly. What am I missing? Thanks!

回答1:

converge can be very helpful for things like this.

const rotate = R.converge(R.append, [R.head, R.identity])
rotate([1, 2, 3]); //=> [1, 2, 3, 1]


回答2:

The S combinator is useful here:

S.S(S.C(R.append), R.head, [1, 2, 3]);
// => [1, 2, 3, 1]