okay so it seems to me 1. until does *two* things, loops and also massages the return values 2. all these different trigger combinators— tick, edge, sample, etc, all return similar things, which is why they can be chained, except for `until()`, which is dissimilar and cannot be changed is this correct?