I have the following code
function coroutine(g) { 
    var it = g(); 
    return () => it.next.apply(it, arguments); 
    // also tried () => { return it.next.apply(it, arguments);
}
var run = coroutine(function* () { 
    var x = 1 + (yield); 
    var y = 1 + (yield); 
    yield (x + y);
});
And the following testing has been executed.
run()
{value: undefined, done: false}
run(10)
{value: undefined, done: false}
run(30).value
"1function* () { var x = 1 + (yield); var y = 1 + (yield); yield (x + y);}1function* () { var x = 1 + (yield); var y = 1 + (yield); yield (x + y);}"
However, shouldn't the last run(30).value returns the value of 42?
However, it works after I change the arrow function to old anonymous function?
function coroutine(g) { 
    var it = g(); 
    return function() { return it.next.apply(it, arguments) }; 
}
