It's possible for monad expressions to have an indeterminate type. E.g:
do {
if ( X ) << Q(...);
return "DONE";
}
...evaluates to a promise if X is true, but evaluates to a raw value if X is false.
A workaround for this is to start your monad block with an empty promise:
do { << Q();
if ( X ) << Q(...);
return "DONE";
}
...now it will always evaluate to a promise.
This enhancement adds sugar for this, like so:
do (Q) {
if ( X ) << Q(...);
return "DONE";
}
It's possible for monad expressions to have an indeterminate type. E.g:
...evaluates to a promise if X is true, but evaluates to a raw value if X is false.
A workaround for this is to start your monad block with an empty promise:
...now it will always evaluate to a promise.
This enhancement adds sugar for this, like so: