Re:Curried Javascript Functions
by apu on Sunday July 19, 2009 @07:58PM
(#713607)
If you already know all about higher-order programming and just want a javascript library with all the haskell/ML-style goodness, I highly recommend O. Steele's Functional library: http://osteele.com/sources/javascript/functional/
If nothing else, then his lambda() implementation with strings should be enough to convince you to use it.
Re:Curried Javascript Functions
by jganetsk on Monday July 20, 2009 @02:25AM
(#714047)
Here's an implementation that I think is shorter, simpler to understand, easier to use, and doesn't require modifying existing functions for currification
function curry(fn) {
var wrappedFnMaker = function(accArgs) {
return function() {
var effectiveArgs = accArgs.concat(Array.prototype.slice.call(arguments));
if (effectiveArgs.length >= fn.length) {
return fn.apply(this, effectiveArgs);
} else {
return wrappedFnMaker(effectiveArgs);
}
};
}
return wrappedFnMaker([]);
}
add = curry(function(a,b,c) { return a + b + c; });
Re:Curried Javascript Functions
by bodhi on Monday July 20, 2009 @09:02AM
(#714341)
What's the deal with the stuff in the footer of this page? "The original page disappeared a couple of years ago. This is an unauthorized copy." It links to http://www.svendtofte.com/code/curried_javascript/ which I guess is the original article?
If nothing else, then his lambda() implementation with strings should be enough to convince you to use it.
In principle, these two lines of code should always produce the same result:
and And they won't necessarily in our case, if the function uses this.http://prototypejs.org/api/function
String.prototype.splitOnSpaces = String.prototype.split.curry(" "); "foo bar baz thud".splitOnSpaces(); //-> ["foo", "bar", "baz", "thud"]