I think that in the current state it is, it doesn't quite live up to what it promises. It relies on some value being returned in every loop-branch (cause afaict, it doesn't go down the 'wrong' side of a loop branch). So a simple program like:
foo := [x | if cond: (x == 0) then: [:1] else [:foo doWith: x]].
foo doWith: 1.
Would hang. And then you'd have to apply the recommended pattern at the bottom. (Where you 'return' all possible values). Now, a naive solution (and this is already taking for granted we have typing) would then have to be:
pseudo: for i in Int: return i.
return (foo doWith: 1).
I think the idea in itself is interesting (and conceptually it seems to be smalltalk with non-det execution) though afaict, it doesn't quite live up to its idea yet.