function watcher(expr, cbk) local lastVal = expr() return function() local newVal = expr() if newVal == lastVal then return end cbk(newVal, lastVal) lastVal = newVal end end