from typing import Callable


def has_non(function: Callable) -> Callable:
    """
    A convenient operator that takes a function (presumed to have the same signature as all of
    the other functions in this section), and returns the logical "converse" - that is, a function 
    which returns True if any part of the input string fails to return True on the given function.

    For example, if we had a function `is_greek` which returns True is a string consists entirely
    of Greek cheracters - then `has_non(is_greek)` would return a callable which returns True if the
    given string contains any non-Greek characters.

    Note the function thus produced may be quite inefficient.  But in a pinch it can be useful to
    whip out "converse" forms of validating functions in this way.
    """
    def wrapped(string: str) -> bool:
        if isinstance(string, str):
            return any(not function(_) for _ in string) 
        raise ValueError("invalid input - not a string")
    return wrapped