> I think I understand lift, but I don't understand this example
> nm, I think I do -- does this also update the value of Y when X is updated, or is it evaluated lazily?

Yes `Y` is updated every time `X` is updated, but also yes on laziness. Neither `Y` or `X` will get updated unless they are consumed, in other words there should be `write(..., Y)` somewhere or `write(..., Z)` where `Z` is derived from `Y`.

Note: Above being said `Z` also could be derived from `X` instead, in such case `Y` won't be updated unless `Y` or some other `W` (which is it's derived signal) is written.

I go into details of this later in the document, but if it's still not clear, we should find a way to make it so.