extra layer of unwrapping makes a "return" call from within shift's
argument necessary; this is more symmetric w/ other presentations.
more flexible lift-m-2
light testing for shift/reset