code: func (ns *Namespace) Apply(seq interface{}, fname string, args ...interface{}) (interface{}, error) {
  	if seq == nil {
  		return make([]interface{}, 0), nil
  	}
  
  	if fname == "apply" {
  		return nil, errors.New("can't apply myself (no turtles allowed)")
  	}
  
  	seqv := reflect.ValueOf(seq)
  	seqv, isNil := indirect(seqv)
  	if isNil {
  		return nil, errors.New("can't iterate over a nil value")
  	}
  
  	fnv, found := ns.lookupFunc(fname)
  	if !found {
  		return nil, errors.New("can't find function " + fname)
  	}
  
  	// fnv := reflect.ValueOf(fn)
  
  	switch seqv.Kind() {
  	case reflect.Array, reflect.Slice:
  		r := make([]interface{}, seqv.Len())
  		for i := 0; i < seqv.Len(); i++ {
  			vv := seqv.Index(i)
  
  			vvv, err := applyFnToThis(fnv, vv, args...)
  
  			if err != nil {
  				return nil, err
  			}
  
  			r[i] = vvv.Interface()
  		}
  
  		return r, nil
  	default:
  		return nil, fmt.Errorf("can't apply over %v", seq)
  	}
  }
docs: // Apply takes a map, array, or slice and returns a new slice with the function fname applied over it.