anchor.diff:          | _ -> 
               None
   
  +    // Adds all the words of an example to the class counts dictionary.
  +    // This is used both in the Seq and DSet versions.
  +    // We want to accumulate a separate Counts[] per partition, so we start start a DSet.fold with null,
  +    // which is passed to each partition, and initialize the running object on the first call.
  +    // This prevents Prajna from having to deserialize the zero object multiple times, once per partition,
  +    // at the cost of a null check per element. 
       let addWords (numLabels: int) (countsOrNull: Counts[]) (words: HashSet<string>, label: int) = 
           let counts = 
               if countsOrNull = null 
  
positive.code:         words |> Seq.iter (fun w -> counts.[label] |> add w 1)
          counts
  
      let addCounts (counts1: Counts[]) (counts2: Counts[]) =
          let ret = 
              Array.map2 (fun (lc1: Counts) (lc2: Counts) ->
  
negative.code:                         let sum = Array.sum wCounts |> float
                          wCounts |> Seq.iteri (fun i c -> logProbs.[i] <- logProbs.[i] + Math.Log(float (c + 1) / (sum + 1.0)))
                      let normProbs = 
                          // Remember to multiply by the prior
                          let probs = Array.map2 (fun logProb prior -> Math.Exp logProb * prior) logProbs priors 
                          let probSum = probs |> Seq.sum
                          probs |> Array.map (fun p -> p / probSum)
  