code: func Or(a, b Type) Type {
  	if a == nil {
  		return b
  	} else if b == nil {
  		return a
  	}
  	fA, ok1 := a.(*Function)
  	fB, ok2 := b.(*Function)
  	if ok1 && ok2 {
  		return fA.Union(fB)
  	} else if ok1 || ok2 {
  		return nil
  	}
  	anyA, ok1 := a.(Any)
  	anyB, ok2 := b.(Any)
  	if ok1 {
  		return anyA.Merge(b)
  	}
  	if ok2 {
  		return anyB.Merge(a)
  	}
  	if Compare(a, b) == 0 {
  		return a
  	}
  	return NewAny(a, b)
  }
docs: // Or returns a type that represents the union of a and b. If one type is a
  // superset of the other, the superset is returned unchanged.