fn sync(&mut self, other: &mut Self) -> WeldResult<bool> {
        Ok(self.push(other)? || other.push(self)?)
    }
Sync this `Type` with `other`, calling push in both directions.

This function returns an error if an incompatible type was pushed in either direction, and
otherwise returns a boolean indicating whether either `Type` changed.
weld/src/ast/type_inference.rs