Fix #18145 and also avoid needless work with explicit foralls
-
forAllOrNothing
now is monadic, so we can skip work. -
#18145 (closed) arose because the free vars calculation was needlessly complex. Made a nested new block to limit the scope of temporaries, and then used the new improved
forAllOrNothing
to skip the do block altogether for an added bonus.