anchor.diff:  % Functional, immutable consistent-hash-ring.
   
   -record(cring, {hash,    % A tuple of {HashMod, HashCfg}.
  -                ring,    % A list of cpoint records, ordered by point field.
  +                ring,    % [#cpoint{}, ...], ordered by ascending point field.
                   addr_num % length(AddrDataList).
                  }).
   -record(cpoint, {point,     % Integer, an item from list from HashMod:hash_addr().
  
positive.code: 
  % Example hash_key/hash_addr functions.
  
  hash_key(Key, _) -> misc:hash(Key).
  
  hash_addr(Addr, NumPoints) ->
      hash_addr(Addr, 1, NumPoints, []).
  
  hash_addr(_, _, 0, Acc)         -> lists:sort(Acc);
  hash_addr(_, _, undefined, Acc) -> lists:sort(Acc);
  hash_addr(Addr, Seed, N, Acc) ->
      Point = misc:hash(Addr, Seed),
      hash_addr(Addr, Point, N - 1, [Point | Acc]).
  
negative.code: % opaque data, that for example might be an address, as long as it's
  % something that HashMod understands.  The Data is opaque user data
  % that the caller just wants to associate with the Addr.
  %
  % The HashMod module must export a hash_addr(Addr, HashCfg) function
  % which returns a sorted list of Points, where Point is an int.  And,
  % the HashMod module also must export a hash_key(Key, HashCfg)
  