pattern
pattern
is a way to do pattern matching in javascript that helps you with asynchronous iterations
var map = require('../pattern')()
, _, f, ac
;
map(f, [], ac, function done(_, _, ac) { return console.error(ac); });
map(f, _, ac, function all(f, l, ac) {
ac.push(f(l.shift())); // head
map(f, l, ac); // l is now tail
});
map(function plusone(x) { return x+1; }, [1,2,3], []);
explanation
// check `samples/nodetuts.js` for working code
insert_all([], function () { console.log('done'); });
insert_all(_, function (l) {
insert_element(l.shift(), function (elem) {
console.log('‣ ', elem);
insert_all(l);
});
});
insert_all([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
the first pattern in pattern
sets the arity of the function to execute
// first call sets arity #1
// when this condition is met it logs the message done
insert_all([], function () { console.log('done'); });
then we normally register the iteration pattern
// var _; was set in the top, value is undefined
insert_all(_, function (l) {
if you then call insert_all
where the argument count matches arity, pattern
knows its time to execute
// one argument, arity #1
// run forest, run
insert_all([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
this is the code you would normally write to do the same thing in javascript
installation
node.js
- install npm
npm install p
var p = require('p');
samples
there are samples in the samples
directory. check them out
roadmap
pointfree style (note i'm just kidding)
contribute
everyone is welcome to contribute. patches, bug-fixes, new features
- create an issue so the community can comment on your idea
- fork
pattern
- create a new branch
git checkout -b feature_name
- create tests for the changes you made
- make sure you pass both existing and newly inserted tests
- commit your changes
- push to your branch
git push origin feature_name
- create an pull request
meta
(oO)--',-
in caos
license
copyright 2012 nuno job <nunojob.com> (oO)--',--
licensed under the apache license, version 2.0 (the "license");
you may not use this file except in compliance with the license.
you may obtain a copy of the license at
http://www.apache.org/licenses/LICENSE-2.0
unless required by applicable law or agreed to in writing, software
distributed under the license is distributed on an "as is" basis,
without warranties or conditions of any kind, either express or implied.
see the license for the specific language governing permissions and
limitations under the license