add .error(msg, fn) support