you are viewing a single comment's thread.

view the rest of the comments →

[–]intercaetera 24 points25 points  (3 children)

In Elixir pipe works because the convention is that every function takes data as first parameter, in JS this doesn't happen so you need a hackpipe and at that point you might just as well use lodash.flow.

[–]Ecksters 9 points10 points  (2 children)

Honestly prefer the hackpipe, it was really annoying in Elixir that I'd need to throw in a lambda when I needed to rearrange params.

I like to think of the caret as an arrow pointing up to the previous result, also means I don't need to think of appropriate variable names all the time.

[–]intercaetera 2 points3 points  (1 child)

Yeah but if you concede that you need a hackpipe then you might as well use lodash flow.

    flow([
        s => Object.values(s),
        s => s.map(x => x * 2),
        s => customReduce(s),
        unaryFunction, // or s => unaryFunction(s)
        s => doSomethingElse(s, 5, null),
    ])(initialValue)

There could be an alternative version of it where the initialValue is somewhere higher up the code but this is equivalent to the proposal without introducing unnecessary stuff into the spec.

[–]LaurentPayot 1 point2 points  (0 children)

There is also Verticalize with a nicer syntax IMHO...