def METHOD_NAME(thing):
    """
    you can dance if you want to
    you can leave your types behind
    """
    # prevent infinite recursion, also make multiple refs to the same thing more efficient
    addr = id(thing)
    if addr in memo_table:
        return memo_table[addr]
    elif addr in seen:
        raise ValueError("Cannot use a self-referencing value here!")
    if isinstance(thing, interpreter._list):
        seen.add(addr)
        result = [METHOD_NAME(x) for x in thing]
    elif isinstance(thing, interpreter._set):
        seen.add(addr)
        result = set(METHOD_NAME(x) for x in thing)
    elif isinstance(thing, interpreter._dict):
        seen.add(addr)
        result = {METHOD_NAME(k): METHOD_NAME(v) for k, v in thing.items()}
    elif isinstance(thing, interpreter._str):
        result = str(thing)
    else:
        result = thing
    memo_table[addr] = result
    return result