def full_qualname(o: object) -> str:
    """Get the fully qualified name of the object.

    Args:
        o: Object to get name for.

    Returns:
        For normal object this returns <module name>.<qualified object name>.
        If that raises an `AttributeError`, the default representation is
        returned instead.
    """
    try:
        return f"{o.__module__}.{o.__qualname__}"
    except AttributeError:
        return repr(o)