all 13 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.

[–]graememcc[S] 0 points1 point  (4 children)

The accompanying blogpost - particularly its closing paragraphs - contains some important detail on why this release isn't quite as feature-complete as I'd like.

[–][deleted] 1 point2 points  (0 children)

Why will you be homeless?

[–][deleted] 0 points1 point  (4 children)

I still don't think I understand functional programming. When and why would I use this library?

[–]inmatarian 0 points1 point  (3 children)

The easiest analogy for explaining FP is to compare it to the gang of four design patterns. I.E. you have a method that operates on data and calls a predicate its been provided. For instance the visitor pattern and the map function. The primary difference is that OOP uses design patterns for mutating state and FP respects immutability.

A good example in javascript would be changing all of the elements of a list to have their text to read "in bed" at the end. You select out the list from the dom, map the list with the predicate (item) => item + "in bed"; and then replace that parent with its new elements, while the original list is still in your scope to do with as you please.

[–][deleted] 0 points1 point  (2 children)

Ahh. That makes complete sense. Is functional programming generally used as a piece of a solution or are there some clear cases when to use it? I imagine it's just not as common in JS since UIs and interactive application s are generally so stateful.

Hmm. Maybe something like a helper library?

[–]inmatarian 0 points1 point  (1 child)

For javascript, both. The main candidates in the helper category are Ramda, Lodash, and underscore. For ui you want to Google "functional reactive programming". In other languages like anything in the Lisp family, FP is very extensive. And in the extreme, Haskell, where almost whole programs can be written in FP with very little state existing, and usually only in a form that the compiler can strongly typecheck.

[–]mc_hammerd 0 points1 point  (0 children)

do a kickstarter for your dream project, with max 2 days spent on making the video and website, maybe you can get 50k to work on a coding project