def index(*args, **kwargs):
    """Search a list for an exact element, or element satisfying a predicate.

    Usage::

        index(element, list_)
        index(of=element, in_=list_)
        index(where=predicate, in_=list_)

    :param element, of: Element to search for (by equality comparison)
    :param where: Predicate defining an element to search for.
                  This should be a callable taking a single argument
                  and returning a boolean result.
    :param list_, in_: List to search in

    :return: Index of first matching element, or -1 if none was found

    .. versionadded:: 0.0.3
    """
    _, idx = _index(*args, start=0, step=1, **kwargs)
    return idx