anchor.diff:  
   
       // ######################        
  -    // Cluster
  +    /// Binary distance tree
       type Cluster<'T> = 
  -        //------- ID * distance * leafCount * cluster left * cluster right
  +        ///ID * distance * leafCount * cluster left * cluster right
           | Node of int * float * int * Cluster<'T> * Cluster<'T>
  +        ///ID * leafCount * Tag
           | Leaf of int * int * 'T
   
       // Returns cluster Id
  
positive.code:         | Cluster.Node(id,_,mc,_,_) -> mc   
          | Cluster.Leaf(id,mc,_)     -> mc
      
  
      let createCluster<'T> (id:int) (dist:float) (left:Cluster<'T>) (right:Cluster<'T>) =        
          let leaveCount = getClusterMemberCount left + getClusterMemberCount right
          Cluster.Node(id, dist, leaveCount, left, right)
  
      let createClusterValue (id:int) (value:'T) =
          Cluster.Leaf(id,1,value)
  
  
  
  
  
  
  
  
  
  
  
      /// Class for chaching already calculated distances to speed up cluster build
      type DistanceCaching<'T>
  
negative.code: 
  
  
      /// Returns a list of all IDs in the cluster
      let getClusterMemberLabels (cluster:Cluster<'a>) =
          let rec loop cluster (acc:int list) =
              match cluster with
  