introduce Value::is<T>
change the way to handle null