anchor.diff:          stderr.writeln('class = $class_');
   
           final typeParameters = class_.typeParameters
  -            .map((p) => CandyType.parameter(p.name, classId))
  +            .map((p) => hir.CandyType.parameter(p.name, classId))
               .toList();
           final typeArguments = impl.typeParameters
  -            .map((it) => CandyType.parameter(it.name, declarationId.parent))
  +            .map((it) => hir.CandyType.parameter(it.name, declarationId.parent))
               .toList();
  -        final genericsMap = Map.fromEntries(
  -            typeParameters.zip<CandyType, MapEntry<CandyType, CandyType>>(
  +        final genericsMap = Map.fromEntries(typeParameters
  +            .zip<hir.CandyType, MapEntry<hir.CandyType, hir.CandyType>>(
                   typeArguments, (a, b) => MapEntry(a, b)));
           stderr.writeln('genericsMap = $genericsMap');
           stderr.writeln('Baked type: ${type.bakeGenerics(genericsMap)}');
  
positive.code:     ast.IfExpression theIf,
    ) {
      final loweredCondition =
          innerExpressionContext(expressionType: Some(CandyType.bool))
              .lowerUnambiguous(theIf.condition);
      if (loweredCondition is Error) return Error(loweredCondition.error);
      final condition = loweredCondition.value;
  
negative.code:         class_.innerDeclarationIds.singleWhere((id) => id.isConstructor);
  
      final typeParameters = class_.typeParameters
          .map((p) => hir.CandyType.parameter(p.name, classId))
          .toList();
      final typeArguments = expression.typeArguments?.arguments
              ?.map((a) =>
                  astTypeToHirType(queryContext, Tuple2(declarationId, a.type)))
              ?.toList() ??
          [];
      final genericsMap = Map.fromEntries(typeParameters
          .zip<hir.CandyType, MapEntry<hir.CandyType, hir.CandyType>>(
              typeArguments, (a, b) => MapEntry(a, b)));
  
      final fields = class_.innerDeclarationIds
  