It took me a while before I figured out you could even do this sort of thing with combinators (partially because I basically hardly ever use `scan` for normal sequences so forgot it existed). `scan`s the only way to maintain some kind of state as you move along an `Observable`.

Though this solution is more obvious it does have subtle race conditions. `alter` is asynchronous so you've no guarantee that it's going to transform the value held by the Agent before the rx stream pushes the next element to `fresh` above, which could have unintended consequences.