anchor.diff:                          let indexAssignExpr = assign indexVarExpr (constant -1) 
                           let lengthExpr = arrayLength arrayVarExpr 
                           let getItemExpr = arrayIndex arrayVarExpr indexVarExpr
  -                        let exprs' = assign current getItemExpr :: exprs
  +                        let exprs' = assign current getItemExpr :: context.Exprs
                           let checkBoundExpr = equal indexVarExpr lengthExpr 
                           let brachExpr = ``if`` checkBoundExpr (``break`` breakLabel) (block [] exprs') 
  -                        let loopExpr = loop (block [] [addAssign indexVarExpr (constant 1); brachExpr; accExpr]) breakLabel continueLabel 
  -                        block (arrayVarExpr :: indexVarExpr :: varExprs) [initExpr; arrayAssignExpr; indexAssignExpr; loopExpr; returnExpr] :> _
  +                        let loopExpr = loop (block [] [addAssign indexVarExpr (constant 1); brachExpr; context.AccExpr]) breakLabel continueLabel 
  +                        block (arrayVarExpr :: indexVarExpr :: context.VarExprs) [context.InitExpr; arrayAssignExpr; indexAssignExpr; loopExpr; context.ReturnExpr] :> _
   
                   | Transform (Lambda ([paramExpr], body), queryExpr') ->
  -                        let exprs' = assign paramExpr current :: assign current body :: exprs
  -                        compile' queryExpr' initExpr accExpr returnExpr (paramExpr :: varExprs) exprs'
  +                        let exprs' = assign paramExpr current :: assign current body :: context.Exprs
  +                        compile' queryExpr' { context with VarExprs = (paramExpr :: context.VarExprs); Exprs = exprs' }
                   | Filter (Lambda ([paramExpr], body), queryExpr') ->
  -                    let exprs' = assign paramExpr current :: body :: exprs
  -                    compile' queryExpr' initExpr accExpr returnExpr (paramExpr :: varExprs) exprs'
  +                    let exprs' = assign paramExpr current :: body :: context.Exprs
  +                    compile' queryExpr' { context with VarExprs = (paramExpr :: context.VarExprs); Exprs = exprs' }
                   | _ -> failwithf "Invalid state %A" queryExpr 
   
               match queryExpr with
  
positive.code:             if instance = null then raise <| new ArgumentNullException("instance")
              instance.GetType().GetMethod(methodName)  
  
          let compile (queryExpr : QueryExpr) : Expression = 
              let rec compile' (queryExpr : QueryExpr)
                              (initExpr : Expression)
                              (accExpr : Expression)
                              (returnExpr :  Expression)
                              (varExprs : ParameterExpression list) 
                              (exprs : Expression list) : Expression =
                  let current = lookup "current" varExprs
                  match queryExpr with
                  | Source (:? Array as array, t) ->
                          let breakLabel = label "break"
  
negative.code:                 let accVarExpr = var "___acc___" t
                  let initExpr = assign accVarExpr (``default`` t)
                  let accExpr = addAssign accVarExpr finalVarExpr
                  let context = { InitExpr = initExpr; AccExpr = accExpr; ReturnExpr = accVarExpr; VarExprs = [accVarExpr; finalVarExpr]; Exprs = [] }
                  let expr = compile' queryExpr' context
                  expr
              | _ -> failwithf "Invalid state %A" queryExpr 
  
  