human
Write me a the Python code you requested given the following:
Complete the below
def make_path_searcher(path_generator, target_predicate, target_normalizer, extra_paths, **kwargs):

    ''''Universal search function generator using lazy evaluation.
    Generate a function that will iterate over all the paths from path_generator using
    target_predicate to filter matching paths.  Each matching path is then noramlized by target_predicate.
    Only the first match is returned.
    :param path_generator: all paths to test with target_predicate
    :type path_generator: iterator
    :param target_predicate: boolean function that tests a given path
    :type target_predicate: function
    :param target_normalizer: function that transforms a matching path to some noramlized form
    :type target_normalizer: function
    :param extra_paths: extra paths to pass to the path_generator
    :type extra_paths: iterator
    :return: the path searching function
    :rtype:  function'
    '''
assistant
#Here is the Python code you requested.
    def path_searcher(target, extra_dirs=extra_paths):
        matches = itertools.ifilter(target_predicate, path_generator(target, extra_dirs, **kwargs))
        paths = itertools.imap(target_normalizer, matches)
        return next(paths, '')
    return path_searcher