anchor.diff:                      let h1, h2 = this.GetHashCode(), that.GetHashCode()
                       if h1 <> h2 
                       then h1 - h2 
  -                    else (if uid = that.Uid then 0 else failwith msgLibraryError) // TODO uid - that.Uid 
  +                    else uid - that.Uid //else (if uid = that.Uid then 0 else failwith msgLibraryError) // TODO uid - that.Uid 
                   | _ -> invalidArg "that" msgLibraryError
  -    override this.Equals _ = false 
  -    override this.GetHashCode() = uid.GetHashCode()
  +
  +    override this.Equals that = match that with :? Unique as that -> uid = that.Uid | _ -> false
  +    override this.GetHashCode () = uid.GetHashCode()
   
   [<AbstractClass>]
   type GParserResult<'a> (tail: InputStream<'a>) = 
  
positive.code:         { 
              Queue = []; Done = Map.empty; Popped = Map.empty; DisRes = Map.empty
              Backlinks = Map.empty; Saved = Map.empty; Stopped = false
              Successes = Set.empty; Failures = Set.empty; Postrace = []
          }
          |> 
          state {
              do! this.Chain(inp) (Continuation<_>.New(fun res ->
                  if res.Succeeded && not res.Tail.IsEmpty 
                  then failure "UnexpectedTrailingChars" (res.Tail) else res
                  |> T.AddResult
              ))
              do! T.Run ()
              let! t = getState
              return (if t.Successes.Count = 0 then t.Failures else t.Successes) |> Seq.toList
          } 
          |> fst
          
  
negative.code:     member this.F : (GParserResult<'a> -> PState<'a>)  = f
      static member New fn = new Continuation<'a>(fn)
      override this.Equals that = 
          let tobj = (that :?> Continuation<'a>).F
          (f :> Object).Equals(tobj)
      override this.GetHashCode() = base.GetHashCode()
      
  and RSet<'a> = Set<GParserResult<'a> >
  