anchor.diff:  
   type DocumentHandlerSet<'TKey, 'TDocument> = seq<('TKey * seq<DocumentHandler<'TDocument>>)>
   
  +type SubscriberEvent<'TContext> = {
  +    Event : obj
  +    Context : 'TContext
  +    StreamId : string
  +    EventNumber: int
  +}
  +
   [<CustomComparison>]
   [<CustomEquality>]
  -type DocumentProcessor<'TKey, 'TDocument> = {
  +type DocumentProcessor<'TKey, 'TDocument, 'TContext> = {
       ProcessorKey : string
       GetDocumentKey : 'TKey -> string
       EventTypes : seq<Type>
  -    Match: (obj -> DocumentHandlerSet<'TKey,'TDocument>)
  +    MatchingKeys: SubscriberEvent<'TContext> -> seq<'TKey>
  +    Process: 'TKey -> 'TDocument -> SubscriberEvent<'TContext> -> 'TDocument
       NewDocument : 'TKey -> 'TDocument
   }
   with
  -    override x.Equals(y) = (match y with :? DocumentProcessor<'TKey, 'TDocument> as y -> x.ProcessorKey = y.ProcessorKey | _ -> false)
  +    override x.Equals(y) = (match y with :? DocumentProcessor<'TKey, 'TDocument, 'TContext> as y -> x.ProcessorKey = y.ProcessorKey | _ -> false)
       override x.GetHashCode() = x.ProcessorKey.GetHashCode()
       interface System.IComparable with 
  -        member x.CompareTo y = x.ProcessorKey.CompareTo (y :?> DocumentProcessor<'TKey, 'TDocument>).ProcessorKey
  +        member x.CompareTo y = x.ProcessorKey.CompareTo (y :?> DocumentProcessor<'TKey, 'TDocument, 'TContext>).ProcessorKey
   
   //with 
   //    static member ToUntypedDocumentProcessor (x:DocumentProcessor<'TKey, 'TDocument>) =
  
positive.code:                     let remaining = (remainingStreams, remainingValues')
                      Some (nextValue, remaining)
  
          let myEvents = (streams, streamValues) |> Seq.unfold generateStream
  
          let processValue (value:int) (docObj:CurrentDoc) =
              let (doc, metadata, etag) = docObj
  
negative.code: 
              doc.Writes <- doc.Writes + 1
  
              let (doc, metadata, etag) = 
                  events
                  |> Seq.fold (documentProcessor.Process key) (doc, metadata, etag)
  
              let (complete, wait) = getPromise()
                  
  