boolean updateVariable(DfaVariableValue value, DfType thisType, DfType thatType) {
      return update(thisType.isMergeable(thatType), thatType.isMergeable(thisType),
                    () -> {
                      DfType type = thisType.tryJoinExactly(thatType);
                      if (type != null) {
                        return new UpdateVariableMergePatch(value, type);
                      }
                      return null;
                    });
    }
boolean updateVariable(DfaVariableValue value, DfType thisType, DfType thatType)