don't call change() without an `fn`