This has allowed me to spot homologous cases where sometimes someone avoids shadowing a variable name but they're not aliasing, and I'm like, “but it would be a bug to refer to the original.”
This makes perfect sense under the “algebraic effects are just generalized try/catch” interpretation. use implicit side effects for weird shit, algebraic effects for systematic patterns and making things testable
but is that something you care about? like, are you regularly running into infinite loops in code that is trivial enough that you wouldn't need an escape hatch in a total language anyway?
like, to me infinite loops are pretty similar to division by zero: they're technically an issue that can happen sometimes but they're so rare that the overhead of statically preventing them is just not worth it
Comments
This swaps the problems of mutability for those of aliasing, but by merging the two conceptually, I only have to deal with one of them.