Skip to content

Instantly share code, notes, and snippets.

@XeCycle
Created October 30, 2015 08:33
Show Gist options
  • Save XeCycle/621d8c8c48d1729daceb to your computer and use it in GitHub Desktop.
Save XeCycle/621d8c8c48d1729daceb to your computer and use it in GitHub Desktop.
An emulation of do notation that remains valid javascript
macro DO {
rule { ($name:ident <- $expr:expr, ret($any...)) } => { ($expr).map($name => ($any...)) }
rule { ($name:ident <- $expr:expr, $any...) } => { ($expr).chain($name => DO($any...))}
rule { ($expr:expr, ret($any...)) } => { ($expr).map(() => ($any...)) }
rule { ($expr:expr, $any...) } => { ($expr).chain(() => DO($any...)) }
rule { ($expr:expr) } => { ($expr) }
}
export DO;
function render$656() {
return fetchA().chain(resA$660 => fetchB().chain(resB$661 => fetchC().map(resC$662 => Element({
A: resA$660,
B: resB$661,
C: resC$662
}))));
}
function render() {
return DO(
resA <- fetchA(),
resB <- fetchB(),
resC <- fetchC(),
ret(Element({
A: resA,
B: resB,
C: resC
}))
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment