anchor.diff:      (type == "unknown")
     );
   
  -  # Filters a source tree removing version control files and directories using cleanSourceWith
  -  #
  -  # Example:
  -  #          cleanSource ./.
  +  /*
  +    Filters a source tree removing version control files and directories using cleanSourceFilter.
  +
  +    Example:
  +             cleanSource ./.
  +  */
     cleanSource = src: cleanSourceWith { filter = cleanSourceFilter; inherit src; };
   
  -  # Like `builtins.filterSource`, except it will compose with itself,
  -  # allowing you to chain multiple calls together without any
  -  # intermediate copies being put in the nix store.
  -  #
  -  #     lib.cleanSourceWith {
  -  #       filter = f;
  -  #       src = lib.cleanSourceWith {
  -  #         filter = g;
  -  #         src = ./.;
  -  #       };
  -  #     }
  -  #     # Succeeds!
  -  #
  -  #     builtins.filterSource f (builtins.filterSource g ./.)
  -  #     # Fails!
  -  #
  -  # Parameters:
  -  #
  -  #   src:      A path or cleanSourceWith result to filter and/or rename.
  -  #
  -  #   filter:   A function (path -> type -> bool)
  -  #             Optional with default value: constant true (include everything)
  -  #             The function will be combined with the && operator such
  -  #             that src.filter is called lazily.
  -  #             For implementing a filter, see
  -  #             https://nixos.org/nix/manual/#builtin-filterSource
  -  #
  -  #   name:     Optional name to use as part of the store path.
  -  #             This defaults to `src.name` or otherwise `"source"`.
  -  #
  -  cleanSourceWith = { filter ? _path: _type: true, src, name ? null }:
  +  /*
  +    Like `builtins.filterSource`, except it will compose with itself,
  +    allowing you to chain multiple calls together without any
  +    intermediate copies being put in the nix store.
  +
  +    Example:
  +        lib.cleanSourceWith {
  +          filter = f;
  +          src = lib.cleanSourceWith {
  +            filter = g;
  +            src = ./.;
  +          };
  +        }
  +        # Succeeds!
  +
  +        builtins.filterSource f (builtins.filterSource g ./.)
  +        # Fails!
  +
  +  */
  +  cleanSourceWith =
  +    {
  +      # A path or cleanSourceWith result to filter and/or rename.
  +      src,
  +      # Optional with default value: constant true (include everything)
  +      # The function will be combined with the && operator such
  +      # that src.filter is called lazily.
  +      # For implementing a filter, see
  +      # https://nixos.org/nix/manual/#builtin-filterSource
  +      # Type: A function (path -> type -> bool)
  +      filter ? _path: _type: true,
  +      # Optional name to use as part of the store path.
  +      # This defaults to `src.name` or otherwise `"source"`.
  +      name ? null
  +    }:
       let
         orig = toSourceAttributes src;
       in fromSourceAttributes {
  
positive.code:     readFile
      ;
  
    # Returns the type of a path: regular (for file), symlink, or directory
    pathType = p: getAttr (baseNameOf p) (readDir (dirOf p));
  
    # Returns true if the path exists and is a directory, false otherwise
    pathIsDirectory = p: if pathExists p then (pathType p) == "directory" else false;
  
    # Returns true if the path exists and is a regular file, false otherwise
    pathIsRegularFile = p: if pathExists p then (pathType p) == "regular" else false;
  
    # Bring in a path as a source, filtering out all Subversion and CVS
    # directories, as well as backup files (*~).
    cleanSourceFilter = name: type: let baseName = baseNameOf (toString name); in ! (
      # Filter out version control software files/directories
      (baseName == ".git" || type == "directory" && (baseName == ".svn" || baseName == "CVS" || baseName == ".hg")) ||
  
negative.code:         satisfiesSubpathInvariant = src ? satisfiesSubpathInvariant && src.satisfiesSubpathInvariant;
        };
  
    /*
      Filter sources by a list of regular expressions.
  
      Example: src = sourceByRegex ./my-subproject [".*\.py$" "^database.sql$"]
    */
    sourceByRegex = src: regexes:
      let
        isFiltered = src ? _isLibCleanSourceWith;
  