macabeus/js-proposal-algebraic-effects

Nested effects

macabeus opened this issue · 2 comments

function nested2 () {
  perform 'foo' // should return 'bar'
  perform 'crazy' // should return 'default'
}

function nested () {
  try {
    nested2()
  } handle {
    if (effect === 'foo') {
      resume 'bar'
    }
  }
}

try {
  nested()
} handle {
  resume 'default'
}

The example should be:

function nested2 () {
  return perform 'foo' // should return 'bar'
  // or
  return perform 'crazy' // should return 'default'
}

See that perform as a statement breaks this:

function getName(user) {
  let name = user.name;
  if (name === null) {
    name = perform 'ask_name';
  }
  return name;
}

I'm closing this issue because we decides here to not have "implicitly bubbleing" on nested try/handle.