diff --git a/src/async.js b/src/async.js index 1205b00..53f6952 100644 --- a/src/async.js +++ b/src/async.js @@ -1,5 +1,6 @@ function Async() { return { + apply: apply, bind: bind, parallel: parallel, run: run, @@ -8,12 +9,30 @@ function Async() { wrap: wrap }; - function bind(m, f) { + function apply(f, x) { return function(g) { - m(function(x) { - f(x)(g); - }); + g(f(x)); + }; + } + + function bind() { + var m, steps, i; + if(arguments.length < 1) { + return wrap(); } + m = arguments[0]; + steps = arguments; + i = 1; + return function(f) { + var step = function(x) { + if(i < steps.length) { + steps[i++](x)(step); + } else { + return f(x); + } + } + m(step); + }; } function parallel() {