@Override
  public ValueBounds updateTypeBounds(Map<Expression, ValueBounds> typeMap) {
    ValueBounds fromType = childAt(0).updateTypeBounds(typeMap);
    ValueBounds toType = childAt(1).updateTypeBounds(typeMap);

    valueBounds = ValueBounds.vector(fromType.getTypeSet() | toType.getTypeSet());

    return valueBounds;
  }
 @Override
 public Type getType() {
   return valueBounds.storageType();
 }