I don't usually have problems with commitment...
I think I can distinguish :: from ::: - :: fails the current branch point, whereas ::: fails the entire rule. I can do ::: trivially. I think I can distinguish between ::: and <commit>; the implementation is a bit tricky, because ::: fails the current match - easy enough - whereas <commit> has to specify to all upper-level matches that they failed too. Is it reasonable for failing a <commit> to be an exception? This would save passing "hard" and "soft" failure codes around. <cut> is just <commit> with a couple of knobs on. I don't think I can distinguish between : and ::. Essentially, how many nodes does each commit to? I would expect the following [ a+ : b | c+ : d | e+ : f ] to do precisely the same as [ a+ :: b | c+ :: d | e+ :: f ] I don't see why Larry describes one as "if-then", but not the other. Basically, I don't think I'm sure what : "gives up". (Apologies if this doesn't sound as lucid as normal, it's 5:31am and I have been hacking too long.) -- Um. There is no David conspiracy. Definitely not. No Kate conspiracy either. No. No, there is definitely not any sort of David conspiracy, and we are definitely *not* in league with the Kate conspiracy. Who doesn't exist. And nor does the David conspiracy. No. No conspiracies here. - Thorfinn, ASR