anchor.diff:  -spec substr(utf8_string(), integer()) -> utf8_string().
   substr(<<>>, _) ->
       <<>>;
  -substr(String, 0) ->
  -    String;
  -substr(String, 1) ->
  -    String;
  +substr(Str, 0) ->
  +    Str;
  +substr(Str, 1) ->
  +    Str;
   substr(<<_Char/utf8, Rest/bytes>>, Start) when Start > 1 ->
       substr(Rest, Start - 1);
  -substr(String, Start) when Start < 0 ->
  -    substr(String, 1 + length(String) + Start).
  +substr(Str, Start) when Start < 0 ->
  +    substr(Str, 1 + length(Str) + Start).
   
   %% @doc Extracts a substring. The substring starts at the given position and
   %% it has the given length. If the length is negative, then the substring ends
  
positive.code: -spec reverse(utf8_string()) -> utf8_string().
  reverse(<<>>) ->
      <<>>;
  reverse(_String = <<Char/utf8, Rest/bytes>>) ->
      <<(reverse(Rest))/bytes, Char/utf8>>.
  
  %% @doc Extracts a substring. The substring starts at the given position. The
  
negative.code: 
  %% @doc Simple case folding. See [http://www.unicode.org/reports/tr44/].
  -spec case_fold(utf8_string()) -> utf8_string().
  case_fold(Str) ->
      << <<(char_fold(C))/utf8>> || <<C/utf8>> <= Str >>.
  
  -spec char_fold(char()) -> char().
  char_fold(C) ->
  