def verify_method_type(method_typer, expected_type,
                       name, ifc_obj, cls_obj, ifc_name, cls_name):
    """Verify a method's type across interface and implementation. Raises
    an exception if they don't match.

    Args:
        method_typer (callable):
            A method type checker (single argument callable) which returns
            True if the supplied argument matches the method type
        expected_type (string):
            A string representation of the expected method type. This is
            used in the exception string
        name (string):
            Name of the attribute being checked
        ifc_obj (object):
            The fetched object from the interface, matched by name
        cls_obj (object):
            The fetched object from the implementation, matched by name
        ifc_name (string):
            Name of the interface class
        cls_name (string):
            Name of the implementation class
    """
    errors = []
    if method_typer(ifc_obj):
        if not method_typer(cls_obj):
            errors.append(
                "'{}' must implement '{}' as {} as defined in interface '{}'"
                "".format(cls_name, name, expected_type, ifc_name)
            )
    return errors