Skip to content

Instantly share code, notes, and snippets.

@staltz
Created October 3, 2016 13:22
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save staltz/6ee58f9a14e54a06605f06dc066d2489 to your computer and use it in GitHub Desktop.
Save staltz/6ee58f9a14e54a06605f06dc066d2489 to your computer and use it in GitHub Desktop.
Playful Haskell Stream I/O with ES6 Generators
function *main() {
const confirmRequest = {
type: 'confirm',
value: 'Are you sure?',
};
const confirmResponse = yield confirmRequest;
if (confirmResponse === true) {
const consoleRequest = {
type: 'console',
value: 'You are sure',
};
yield consoleRequest;
} else {
const consoleRequest = {
type: 'console',
value: 'You are not sure',
};
yield consoleRequest;
}
}
function run(mainFn) {
requests = mainFn();
let next = requests.next();
while (!next.done) {
const request = next.value;
let response = null;
if (request.type === 'console') {
console.log(request.value);
} else if (request.type === 'confirm') {
response = window.confirm(request.value);
}
next = requests.next(response);
}
}
run(main);
@staltz
Copy link
Author

staltz commented Oct 3, 2016

The program above is equivalent to

var response = window.confirm('Are you sure');
if (response === true) {
  console.log('You are sure');
} else {
  console.log('You are not sure');
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment