On Github creationix / moonslice-talk
By Tim Caswell
var continuable = fs.readFile("myFile.txt");
continuable(function (err, data) { ... });
function init(conf, description, exclude) {
  return serial(
    fs.mkdir("."),
    parallel(
      fs.mkdir("branches"),
      write("config", conf),
      write("description", description),
      serial(
        fs.mkdir("info"),
        write("info/exclude", exclude)
      )
    )
  );
}
function serial() {
  var items = Arrayslice.call(arguments);
  return function (callback) {
    check();
    function check(err) {
      if (err) return callback(err);
      var next = items.shift();
      if (!next) return callback();
      next(check);
    }
  };
}
function* fib() {
  var a = 1, b = 0;
  while (true) {
    yield a
    var temp = a;
    a = a + b;
    b = temp;
  }
}
run(function* () {
  var repo = yield jsgit.repo("/path/to/repo");
  var head = yield repo.readRef("HEAD");
  var commit = yield repo.load(head);
  var tree = yield repo.load(commit.tree);
});
run(function* () {
  var names = yield fs.readdir("mydir");
  names.forEach(function (name) {
    var path = path.join("mydir/", name);
    // ERROR!!!
    var data = yield fs.readFile(path, "utf8");
    console.log(path, data);
  });
});
run(function* () {
  var names = yield fs.readdir("mydir");
  yield* each(names, function* (name) {
    var path = path.join("mydir/", name);
    var data = yield fs.readFile(path, "utf8");
    console.log(path, data);
  });
});
function* each(array, callback) {
  for (var i = 0, i < array.length; i++) {
    yield* callback(array[i]);
  }
}
var stream = {
  read: function (callback) { /*...*/ },
  abort: function (callback) { /*...*/ },
};
var stream = fs.readStream("/path/to/file");
var sink = fs.writeStream("/path/to/newFile");
sink(stream);
var objectStream = parse(jsonStream);
tcp.createServer(8080, function (stream) {
  stream.sink(stream);
});
var decoder = JSON.createDecoder(emit);
decoder.write('{"name":"Tim');
decoder.write(' Caswell"}[1');
decoder.write(',2,3][4,5,6]');
decoder.end();
{ name: 'Tim Caswell' }
[ 1, 2, 3 ]
[ 4, 5, 6 ]
var encoder = JSON.createEncoder(console.log);
encoder.write({ name: 'Tim Caswell' });
encoder.write([ 1, 2, 3 ]);
encoder.write([ 4, 5, 6 ]);
encoder.end();
'{"name":"Tim Caswell"}'
'[1,2,3]'
'[4,5,6]'
json = JSON.stringify({name: 'Tim Caswell'});
json = JSON.stringify([1, 2, 3]);
json = JSON.stringify([4, 5, 6]);
var parser = HTTP.createParser(console.log);
parser.write('GET / HTTP/1.1\r\nHost: ');
parser.write('creationix.com\r\nConnec');
parser.write('tion: Keep-Alive\r\n\r\n');
parser.write('GET /favicon.ico HTTP/1.');
parser.write('1\r\nHost: creationix.co');
parser.write('m\r\nConnection: Close\r');
parser.write('\n\r\n');
parser.end();
{
  method: 'GET', path: '/',
  headers: [
    [ 'Host', 'creationix.com' ],
    [ 'Connection', 'Keep-Alive' ]
  ]
}
{
  method: 'GET', path: '/favicon.ico',
  headers: [
    [ 'Host', 'creationix.com' ],
    [ 'Connection', 'Close' ]
  ]
}
function transformer(emit) {
  return function (item) {
  };
}
var state = inflate(onByte, $after);
for (var i = 0; i < data.length; i++) {
  state = state(data[i]);
}
function $before(byte) {
  return inflate(onByte, $after);
}
function $after(byte) {
  return $someOtherState;
}
function hexMachine(emit) {
  var left = 4, num = 0;
  return $hex;
  function $hex(byte) {
    num |= parseHex(byte) << (--left * 4);
    if (left) return $hex;
    return emit(num);
  }
}
var tcp = require('simple-tcp');
tcp.createServer(8080, function (socket) {
  // A client connected
  // socket = { read, abort, sink }
});
var tcp = require('simple-tcp');
var parser = require('http-request-parser');
var encoder = require('http-response-encoder');
tcp.createServer(8080, function (socket) {
  var httpSocket = parser(socket);
  httpSocket.sink = function (stream) {
    socket.sink(encoder(stream));
  };
});
function app(request) {
  console.log(request.method, request.path);
  return "Hello World";
}
test("Root returns HTML", function (assert) {
  var request = {
    method: "GET", path: "/", headers: []
  };
  var result = app(request);
  normalize(result, function (result) {
    assert.equal(result.code, 200);
    assert.end();
  });
});