anchor.diff:          code,
           const dart.Code(')'),
         ]));
  +
  +  dart.Code assignVarTypesafe(String name, dart.Reference type) {
  +    return dart.CodeExpression(dart.Block.of([
  +      type.code,
  +      const dart.Code(' '),
  +      dart.refer(name).code,
  +      const dart.Code('='),
  +      code,
  +    ])).statement;
  +  }
   }
   
   dart.Expression lambdaOf(List<dart.Code> code) {
  
positive.code: 
    @override
    List<dart.Code> visitWhileExpression(WhileExpression node) => [
          unitInstance
              .assignVar(_name(node.id), compileType(context, node.type))
              .statement,
          dart.Code('${_label(node.id)}:\nwhile (true) {'),
          ...node.condition.accept(this),
          dart.Code('if (!${_name(node.condition.id)}.value) {'),
  
negative.code:     final iteratorName = '${_name(node.id)}_iterator';
      final rawItemName = '${_name(node.id)}_rawItem';
      return [
        unitInstance.assignVarTypesafe(
            _name(node.id), compileType(context, node.type)),
        ...node.iterable.accept(this),
        _refer(node.iterable.id)
            .property('iterator')
  