anchor.diff:        for (final expression in body) {
           expression.accept(visitor);
         }
  -      type = hir.CandyType.union(visitor.breakTypes.toList());
  +      type = _unionOrUnit(visitor.breakTypes.toList());
       }
   
       return Ok([hir.LoopExpression(getId(loop), body, type)]);
  
positive.code:     }
  
      final type = expressionType.valueOrNull ??
          hir.CandyType.union({
            if (thenBody.isNotEmpty) thenBody.last.type,
            if (elseBody.isNotEmpty) elseBody.last.type,
          }.toList());
  
negative.code:     return Ok([hir.AssignmentExpression(getId(expression), left, right)]);
    }
  }
  
  hir.CandyType _unionOrUnit(List<hir.CandyType> types) {
    return types.isEmpty ? hir.CandyType.unit : hir.CandyType.union(types);
  }
  