pub fn children_mut(&mut self) -> vec::IntoIter<&mut Type> {
        use self::BuilderKind::*;
        use self::Type::*;
        match *self {
            Unknown | Scalar(_) | Simd(_) => vec![],
            Alias(_, ref mut ty) => vec![ty.as_mut()],
            Vector(ref mut elem) => vec![elem.as_mut()],
            Dict(ref mut key, ref mut value) => vec![key.as_mut(), value.as_mut()],
            Builder(ref mut kind, _) => match kind {
                Appender(ref mut elem) => vec![elem.as_mut()],
                Merger(ref mut elem, _) => vec![elem.as_mut()],
                DictMerger(ref mut key, ref mut value, _) => vec![key.as_mut(), value.as_mut()],
                GroupMerger(ref mut key, ref mut value) => vec![key.as_mut(), value.as_mut()],
                VecMerger(ref mut elem, _) => vec![elem.as_mut()],
            },
            Struct(ref mut elems) => elems.iter_mut().collect(),
            Function(ref mut params, ref mut res) => {
                let mut children = vec![];
                for param in params.iter_mut() {
                    children.push(param);
                }
                children.push(res.as_mut());
                children
            }
        }
        .into_iter()
    }
Returns an iterator over mutable references to child types of this `Type`.
weld/src/ast/ast.rs