code: func (t *Function) Union(other *Function) *Function {
  	if other == nil {
  		return t
  	} else if t == nil {
  		return other
  	}
  	a := t.Args()
  	b := other.Args()
  	if len(a) != len(b) {
  		return nil
  	}
  	args := make([]Type, len(a))
  	for i := range a {
  		args[i] = Or(a[i], b[i])
  	}
  
  	return NewFunction(args, Or(t.Result(), other.Result()))
  }
docs: // Union returns a new function represnting the union of t and other. Functions
  // must have the same arity to be unioned.