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