Create a gist now

Instantly share code, notes, and snippets.

do-notation using sweet.js
macro $do {
case { $y:expr } => {
$y
}
case { $x:ident <- $y:expr $rest ... } => {
λ['>=']($y, function($x) {
return $do { $rest ... }
});
}
}
// Using the bilby.js functional programming library:
// https://github.com/pufuwozu/bilby.js
var λ = require('./bilby');
// Haskell:
//
// do
// x <- [1, 2]
// y <- [x, x]
// [y * 2, y * 3]
//
// [2,3,2,3,4,6,4,6]
// sweet.js:
// Can't use arrays directly because of https://github.com/mozilla/sweet.js/issues/28
// Need to manually replace a, b and c in output with array expressions.
var list = $do {
x <- a // [1, 2]
y <- b // [x, x]
c // [y * 2, y * 3]
};
console.log(list);
// [ 2, 3, 2, 3, 4, 6, 4, 6 ]
@pbouzakis

This is awesome! Nice job

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