anchor.diff:          /// NOTE: do not move this function as the AddressConverter's reflection code relies on it being exactly here!
           static member makeFromString<'a> (addressStr : string) =
               let names = addressStr.Split '/' |> List.ofArray |> List.map Name.make
  -            let hashCode = addressStr.GetHashCode ()
  -            { Names = names; HashCode = hashCode; TypeCarrier = fun (_ : 'a) -> () }
  +            { Names = names; HashCode = Name.hashNames names; TypeCarrier = fun (_ : 'a) -> () }
   
           /// Hash an Address.
           static member hash (address : 'a Address) =
  
positive.code: 
          /// The empty address.
          let empty<'a> =
              { Names = []; HashCode = String.Empty.GetHashCode (); TypeCarrier = fun (_ : 'a) -> () }
  
          /// Make an address from a list of names.
          let makeFromList<'a> names : 'a Address =
  
negative.code: 
          /// Equate Addresses.
          static member equals address address2 =
              let hashesSame = address.HashCode = address2.HashCode // OPTIMIZATION: first check hash equality
              let namesSame = Name.equateNames address.Names address2.Names
              hashesSame && namesSame
  
          /// Compare Addresses.
          static member compare address address2 =
  