def to_py(o, keyword_fn: Callable[[kw.Keyword], Any] = _kw_name):
    """Recursively convert Lisp collections into Python collections."""
    if isinstance(o, ISeq):
        return _to_py_list(o, keyword_fn=keyword_fn)
    elif not isinstance(
        o, (IPersistentList, IPersistentMap, IPersistentSet, IPersistentVector)
    ):
        return o
    else:  # pragma: no cover
        return _to_py_backup(o, keyword_fn=keyword_fn)