public Type inferType(List<Var> vars, List<List<Type>> varTypes) { Type t1 = left.inferType(vars, varTypes); Type t2 = right.inferType(vars, varTypes); if (t1 == null || t2 == null || !t1.matches(t2)) { inferedType = null; // update cache return null; } inferedType = PType.T; // update cache return PType.T; }