1.0.0 • Published 9 years ago
@riim/curry v1.0.0
curry
Fast curry implementation with placeholders and function-bind-syntax support.
Installation
npm install @riim/curry --saveUsage
Basic
var curry = require('@riim/curry');
var sum = curry(function(a, b) { return a + b; });
var addOne = sum(1); // or sum(curry.__, 1)
console.log(addOne(2));
// => 3Placeholders
var curry = require('@riim/curry');
var setProperty = curry(function(obj, name, value) {
obj[name] = value;
return obj;
});
var setUserAge = setProperty(curry.__, 'age');
console.log(setUserAge({}, 30));
// => { age: 30 }ES.Next syntax
import { curry, __ } from '@riim/curry';
let setProperty = curry((obj, name, value) => {
obj[name] = value;
return obj;
});
let setUserAge = setProperty(__, 'age');
console.log(setUserAge({}, 30));
// => { age: 30 }Function bind syntax
import { curry, __ } from '@riim/curry';
let setProperty = ((obj, name, value) => {
obj[name] = value;
return obj;
})::curry();
let setUserAge = setProperty(__, 'age');
console.log(setUserAge({}, 30));
// => { age: 30 }Benchmark
Create - sum = curry((a, b) => a + b) - least important result
Lift - addOne = sum(1)
Call - addOne(2) - much more important result than the previous two
Results in K ops/sec.
| Library | Create | Lift | Call |
|---|---|---|---|
| @riim/curry | 2,450 | 5,500 | 6,600 |
| curry | 13,500 | 400 | 350 |
| cast-curry | 4,550 | 165 | 350 |
| just-curry | 900 | 200 | 195 |
| auto-curry | 385 | 170 | 155 |
| light-curry | 21,900 | 3,950 | 1,200 |
| @thisables/curry | 400 | 700 | 600 |
| @ibrokethat/curry | 6,100 | 250 | 2,050 |
| instant-curry | 7,100 | 250 | 1,600 |
| fj-curry | 13,750 | 385 | 350 |
| curry-d | 9,100 | 350 | 330 |
Benchmark sources can be found in the folder perf.
1.0.0
9 years ago