edge-triggered watches

fixes #3