anchor.diff:  let internal ct (o:obj) =
     o :?> CommonTree
   
  +//
   let private child o n =
     (ct (ct o).Children.[n])
   
  +//
   let private addLocal (s:Scopes) (n:string) =
     match s with
     | [] -> failwith EmptyScopeChain
     | x::[] -> s
     | x::xs -> {x with Locals = (Map.add n emptyLocal x.Locals)} :: xs
   
  +//
   let private addLocals (s:Scopes) (ns:string list) =
     match s with 
     | [] -> failwith EmptyScopeChain
  
positive.code:       locals <- Map.add n emptyLocal locals
      { x with Locals = locals } :: xs
  
  let private getAst scope pr =
    scope := (snd pr)
    (fst pr)
  
  let private getIdentifier (s:Scopes) (n:string) =
    match s with
    | [] -> failwith EmptyScopeChain
  
negative.code:       { x with Locals = Map.add a_name modified x.Locals } :: xs
      | _ -> s
  
  //
  let private forEachChild (func:CommonTree -> 'a) (tree:CommonTree) =
    match tree.Children with
    | null -> []
    | _    -> [for child in tree.Children -> func (ct child)]
  
  //
  let private genChildren gen (tree:CommonTree) (scopes:Scopes ref) =
    [for child in tree.Children -> getAst scopes (gen (ct child) !scopes)]
  
  