def to_bool(boolean: bool):
    """
    Checks if an argument is of type bool:
        - If argument is type bool, simply returns argument
        - If argunent is type str, attempts to convert to type bool
        - Raises TypeError otherwise

    :param boolean: bool, str
        argument to be converted to type bool
    :return: bool
        original argument or converted string-to-bool argument
    """
    if isinstance(boolean, bool):
        return boolean

    if not isinstance(boolean, str):
        raise TypeError('value {} is not a bool'.format(boolean))

    if boolean.lower() == 'true':
        return True
    elif boolean.lower() == 'false':
        return False
    else:
        raise TypeError('value {} is not a bool'.format(boolean))