anchor.diff:  
   -spec has_country_code(PhoneNumber::phonenumber()) -> boolean().
   
  -has_country_code(#phonenumber{has_country_code=Hcc}) ->
  -    Hcc.
  +has_country_code(#phonenumber{has_country_code=Value}) ->
  +    Value.
   
   -spec get_country_code(PhoneNumber::phonenumber()) -> non_neg_integer().
   
  -get_country_code(#phonenumber{country_code=CC}) ->
  -    CC.
  -
  --spec set_country_code(CountryCode::non_neg_integer(), PhoneNumber::phonenumber()) -> NewPhoneNumber::phonenumber().
  +get_country_code(#phonenumber{country_code=Value}) ->
  +    Value.
  +
  +-spec set_country_code(
  +    CountryCode::non_neg_integer(),
  +    PhoneNumber::phonenumber()
  +    ) -> NewPhoneNumber::phonenumber().
   
   set_country_code(_CountryCode, #phonenumber{}=PhoneNumber) when is_integer(_CountryCode)  ->
       PhoneNumber#phonenumber{has_country_code = true, country_code = _CountryCode};
  
positive.code: 
  -spec has_extension(PhoneNumber::phonenumber()) -> boolean().
  
  has_extension(#phonenumber{has_extension=Hex}) ->
      Hex.
  
  -spec get_extension(PhoneNumber::phonenumber()) -> binary().
  
  
negative.code:         preferred_domestic_carrier_code = _PreferredDomesticCarrierCode
      }.
  
  -spec clear_preferred_domestic_carrier_code(PhoneNumber::phonenumber()) -> NewPhoneNumber::phonenumber().
  
  clear_preferred_domestic_carrier_code(#phonenumber{}=PhoneNumber) ->
      PhoneNumber#phonenumber{
          has_preferred_domestic_carrier_code=false,
          preferred_domestic_carrier_code = <<>>}.
  
  %% clear
  
  -spec clear(PhoneNumber::phonenumber()) -> NewPhoneNumber::phonenumber().
  
  clear(#phonenumber{}) ->
      new().
  
  -spec merge_from(
      PhoneNumberFrom::phonenumber(),
      PhoneNumberTo::phonenumber()
      ) -> NewPhoneNumber::phonenumber().
  
  merge_from(#phonenumber{}=PhoneNumberFrom, #phonenumber{}=PhoneNumberTo) ->
      Step1 = if PhoneNumberFrom#phonenumber.has_country_code ->
          set_country_code(PhoneNumberFrom#phonenumber.country_code, PhoneNumberTo);
          true -> PhoneNumberTo 
      end,
      Step2 = if PhoneNumberFrom#phonenumber.has_national_number ->
          set_national_number(PhoneNumberFrom#phonenumber.national_number, Step1);
          true -> Step1 
      end,
      Step3 = if PhoneNumberFrom#phonenumber.has_extension ->
          set_extension(PhoneNumberFrom#phonenumber.extension, Step2);
          true -> Step2 
      end,
      Step4 = if PhoneNumberFrom#phonenumber.has_italian_leading_zero ->
          set_italian_leading_zero(PhoneNumberFrom#phonenumber.italian_leading_zero, Step3);
          true -> Step3 
      end,
      Step5 = if PhoneNumberFrom#phonenumber.has_number_of_leading_zeros ->
          set_number_of_leading_zeros(PhoneNumberFrom#phonenumber.number_of_leading_zeros, Step4);
          true -> Step4 
      end,
      Step6 = if PhoneNumberFrom#phonenumber.has_raw_input ->
          set_raw_input(PhoneNumberFrom#phonenumber.raw_input, Step5);
          true -> Step5 
      end,
      Step7 = if PhoneNumberFrom#phonenumber.has_country_code_source ->
          set_country_code_source(PhoneNumberFrom#phonenumber.country_code_source, Step6);
          true -> Step6 
      end,
      if PhoneNumberFrom#phonenumber.has_preferred_domestic_carrier_code ->
          set_preferred_domestic_carrier_code(PhoneNumberFrom#phonenumber.preferred_domestic_carrier_code, Step7);
          true -> Step7 
      end.
  
  
  -spec exactly_same_as(PhoneNumber::phonenumber(), PhoneNumberOther::phonenumber()) -> boolean().
  
  exactly_same_as(#phonenumber{}=PhoneNumber, #phonenumber{}=PhoneNumberOther) ->
      PhoneNumber == PhoneNumberOther.