anchor.diff:        absolutePaths = builtins.map (path: builtins.toPath (root + "/" + path)) relativePaths;
       in
         absolutePaths;
  -
   }
  
positive.code:     in lenStr >= lenSuff &&
         substring (lenStr - lenSuff) lenStr str == suff;
  
  
    # Convert a string to a list of characters (i.e. singleton strings).
    # For instance, "abc" becomes ["a" "b" "c"].  This allows you to,
    # e.g., map a function over each character.  However, note that this
    # will likely be horribly inefficient; Nix is not a general purpose
    # programming language.  Complex string manipulations should, if
    # appropriate, be done in a derivation.
    stringToCharacters = s:
      map (p: substring p 1 s) (lib.range 0 (stringLength s - 1));
  
  
    # Manipulate a string charactter by character and replace them by
    # strings before concatenating the results.
    stringAsChars = f: s:
      concatStrings (
        map f (stringToCharacters s)
      );
  
  
    # Escape occurrence of the elements of ‘list’ in ‘string’ by
    # prefixing it with a backslash. For example, ‘escape ["(" ")"]
    # "(foo)"’ returns the string ‘\(foo\)’.
    escape = list: replaceChars list (map (c: "\\${c}") list);
  
  
    # Escape all characters that have special meaning in the Bourne shell.
    escapeShellArg = lib.escape (stringToCharacters "\\ ';$`()|<>\t*[]");
  
  
    # Obsolete - use replaceStrings instead.
    replaceChars = builtins.replaceStrings or (
      del: new: s:
      let
  
negative.code:       else
          s;
  
    /* Return the prefix of the second argument if the first argument matches
       its suffix.
  
       Example:
         removeSuffix "front" "homefront"
         => "home"
         removeSuffix "xxx" "homefront"
         => "homefront"
    */
    removeSuffix = suf: s:
      let
        sufLen = stringLength suf;
  