Both of these loops:
if { (for ?i in 1..10 { unless i > 5 ; fail }) :: !println("nothing in 1..10 is > 5")
| else :: !println("something in 1..10 is > 5")
}
and
if { (for ?i in 1..10 { if {i > 5:: fail } }) :: !println("nothing in 1..10 is > 5")
| else :: !println("something in 1..10 is > 5")
}
are compiled so that when the test fails, the loop simply terminates. The generated loop proc does not return a success indicator.