code: public <T extends Type> T selectCandidate(T[] candidates, T actual, Environment environment) {
  		//
  		T candidate = null;
  		for (int i = 0; i != candidates.length; ++i) {
  			T next = candidates[i];
  			if (subtypeOperator.isSubtype(next, actual, environment)) {
  				if (candidate == null) {
  					candidate = next;
  				} else {
  					candidate = selectCandidate(candidate, next, actual, environment);
  				}
  			}
  		}
  		//
  		return candidate;
  	}
docs: Given an array of candidate types, select the most precise match for a actual
  type. If no such candidate exists, return null (which should be impossible
  for type correct code).
  
  @param candidates
  @param actual
  @return