fn push_complete(&mut self, other: Type) -> WeldResult<bool> {
        match other {
            Scalar(_) | Simd(_) if *self == Unknown => {
                *self = other;
                Ok(true)
            }
            Scalar(_) | Simd(_) if *self == other => Ok(false),
            Vector(ref elem) if *self == Unknown => {
                *self = Vector(elem.clone());
                Ok(true)
            }
            Vector(ref elem) => {
                if let Vector(ref mut dest) = *self {
                    dest.push_complete(elem.as_ref().clone())
                } else {
                    compile_err!("Type mismatch: expected {} but got {}", &other, self)
                }
            }
            _ => compile_err!("Type mismatch: expected {} but got {}", &other, self),
        }
    }
Sets this `Type` to be `other`.
weld/src/ast/type_inference.rs