code: func simplify(a AST) AST {
  	var seen []AST
  	skip := func(a AST) bool {
  		for _, v := range seen {
  			if v == a {
  				return true
  			}
  		}
  		seen = append(seen, a)
  		return false
  	}
  	if r := a.Copy(simplifyOne, skip); r != nil {
  		return r
  	}
  	return a
  }
docs: // simplify replaces template parameters with their expansions, and
  // merges qualifiers.