anchor.diff:          if set.IsConstant then
               constant <| lazy ( set.Content |> Mod.force |> HRefSet.toList |> List.groupBy (fun (a,_) -> a :> obj) |> List.map (fun (k,kvs) -> unbox<'a> k, kvs |> List.map snd |> HSet.ofList ) |> HMap.ofList )
           else
  -            amap <| fun scope -> new Readers.GroupByReader<'a, 'b>(scope, set)
  +            amap <| fun scope -> new Readers.OfASetReader<'a, 'b>(scope, set)
   
       let chooseSet (f : 'a -> Option<'b>) (set : aset<'a>) : amap<'a, 'b> =
           set |> mapSet f |> flatten
  
positive.code:             override x.Release() =
                  r.Dispose()
  
          type OfModReader<'a, 'b>(scope : Ag.Scope, input : IMod<hmap<'a, 'b>>) =
              inherit AbstractReader<hmap<'a, 'b>, hdeltamap<'a, 'b>>(scope, HMap.trace)
  
  
negative.code:             override x.Release() =
                  r.Dispose()
       
          type OfASetReader<'a, 'b>(scope : Ag.Scope, set : aset<'a * 'b>) =
              inherit AbstractReader<hmap<'a, hset<'b>>, hdeltamap<'a, hset<'b>>>(scope, HMap.trace)
  
              let r = set.GetReader()
  