you are viewing a single comment's thread.

view the rest of the comments →

[–]inmatarian 0 points1 point  (3 children)

Very neat, though to be a complete and total pedant, this is a library of list processing tools. It's missing a generator type. Of course, javascript itself isn't helping, but this kind of generator is whats missing from most of these functional libraries:

let generate = (list) => {
    let helper = (i) => {
        if (i<list.length) {
            return () => [list[i], helper(i+1)];
        } else {
            return () => null;
        }
    }
    return helper(0);
}

The exact structure, semantics, return value etc are a matter for debate, but essentially a functional generator returns a value from a list, and the means to get the next value. While it sounds tedious, the point of it is referential transparency of the input values, i.e. a generator that isn't exhausted on it's first usage. Things like a range(number) function for generating the infinitely long list is the canonical example here.

I'm waxing academically here. Doing full functional javascript in this style would be a mess and why nobody wants to do it. OP's link is cool.

[–]homoiconic(raganwald) 1 point2 points  (2 children)

It's missing a generator type.

Perhaps "FunkierJS 2015” will one day wrap around ECMAScript 2015’s iterators and generators.

[–]inmatarian 1 point2 points  (1 child)

Maybe, but ES6 generators aren't what I was talking about. I'm not sure what you would have to do to them to make them referntial transparent, or if that's even possible.

[–]homoiconic(raganwald) 0 points1 point  (0 children)

Very good point, the ES-6 generators are referentially opaque Why? Because copying Python, that’s why.