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