anchor.diff:  
       /// The empty address.
       let empty<'a> =
  -        { Names = []; OptFullName = Some Name.empty; OptHashCode = Some 0; TypeCarrier = fun (_ : 'a) -> () }
  +        { Names = []; HashCode = 0; TypeCarrier = fun (_ : 'a) -> () }
   
       /// Make an address from names.
       let makeFromNames<'a> names =
  -        { Names = names |> List.ofSeq; OptFullName = None; OptHashCode = None; TypeCarrier = fun (_ : 'a) -> () }
  +        { Names = names |> List.ofSeq; HashCode = Name.hashNames names; TypeCarrier = fun (_ : 'a) -> () }
   
       /// Make an address from a '/' delimited string.
       let makeFromFullName<'a> fullName =
  
positive.code: 
      /// Change the type of an address.
      let changeType<'a, 'b> (address : 'a Address) =
          { Names = address.Names; OptFullName = address.OptFullName; OptHashCode = address.OptHashCode; TypeCarrier = fun (_ : 'b) -> () }
  
      /// Get the full name of an address.
      let getFullName address =
  
negative.code:         Name.split [|'/'|] name
  
      static member internal getFullName (address : 'a Address) =
          Address<'a>.join address.Names
  
      /// Make an address from a '/' delimited string.
      /// NOTE: do not move this function as the AddressConverter's reflection code relies on it being exactly here!
      static member makeFromFullName fullName =
          let names = Address<'a>.split fullName |> List.ofSeq
          { Names = names; HashCode = Name.hashNames names; TypeCarrier = fun (_ : 'a) -> () }
  
      /// Hash an Address.
      static member hash (address : 'a Address) =
          address.HashCode
              
      /// Equate Addresses.
      static member equals address address2 =
  