anchor.diff:  type ParseResult<'TokenType> =
       | Success of Tree<'TokenType>
       | Error of string
  +
  +let hashptr (nodes: int list) =
  +    let sum = ref (int64 nodes.Length + 1L)
  +    nodes |> List.iter (fun x -> sum := !sum * 17L + (int64 x))
  +    !sum
   
   let buildAst<'TokenType> (parser : ParserSource<'TokenType>) (tokens : seq<'TokenType>) =
       let tokenEnum = tokens.GetEnumerator()
  
positive.code:         | Some context ->
              let root = sppfNodes.[pointers.[int context.Pointer].[0]] 
              Success (new Tree<_>(Seq.toArray tokens, root, rules))                      
          | None -> Error("nope")
  
      createEpsNodesAndPtr()
      run 0
  
negative.code:     let setU = new HashSet<Context>()
      let setP = new Dictionary<int<vertex>, ResizeArray<int<ptr>>>()
      let setN = new HashSet<int>()
      let setW = new Dictionary<int64, ResizeArray<int<ptr>>>()
      let reductions = new Dictionary<int<ptr> * int, int>()
      let nonTermChildren = new Dictionary<int, ResizeArray<int list>>()
      
  