@Override
  public void typeResolve(Environment base) {
    if (typeParams != null) {
      FlatCheckedEnvironment params =
          new FlatCheckedEnvironment(getTypeParamDefinitions(), base, NameScope.NAMES);

      type = type.typeResolve(params, null);
    } else {
      type = type.typeResolve(base, null);
    }

    if (base.isVDMPP()) {
      name.setTypeQualifier(type.parameters);
    }

    if (body instanceof TCSubclassResponsibilityExpression
        || body instanceof TCNotYetSpecifiedExpression) {
      isUndefined = true;
    }

    if (precondition != null) {
      predef.typeResolve(base);
    }

    if (postcondition != null) {
      postdef.typeResolve(base);
    }

    for (TCPatternList pp : paramPatternList) {
      pp.typeResolve(base);
    }
  }