0.1.0 • Published 12 years ago
rephrase v0.1.0
Rephrase
Rewrite rules for JavaScript.
What?
A rewrite rule is represented as three consecutive block comments in a JavaScript file:
/* forall a f g. */
/* a.map(f).map(g) */
/* a.map(compose(f, g)) */The above means whenever we see an expression that looks like
a.map(f).map(g) (where a, f and g are "holes"), then we can
replace that expression with a.map(function(a) { return f(g(a)); })
(with a, f and g filled in with what occured in the first
expression).
After we put the above in the header of a JavaScript file, we can write code like so:
function compose(f, g) {
return function(x) {
return f(g(x));
};
}
function add(a) {
return function(b) {
return a + b;
};
}
console.log([1, 2, 3].map(add(1)).map(add(2)));This original code is mapping over our array twice. Those two passes should be done in one.
If we use the rephrase command, we will get the rewritten JavaScript
output:
function compose(f, g) {
return function (x) {
return f(g(x));
};
}
function add(a) {
return function (b) {
return a + b;
};
}
console.log([
1,
2,
3
].map(compose(add(1), add(2))));There is now only a single map call. Much more efficient!
Usage
Command-line:
npm install -g rephrase
rephrase examples/array-fusion.jsFrom repository:
node main.js examples/array-fusion.js0.1.0
12 years ago