к
swap (a, b) = (b, a)
вот функция например, которая переставляет элементы в кортеже, без всякой мутабельности
вот задача:
1. есть ленивый невыполненный список неизвестной длины
2. строим из нее лениво мапу, мапа пока не вычисляется, ни один элемент не прочитался
3. ищем путь до какого-нибудь элемента. И тут все, так как мы не знаем длину списка, мы не знаем глубину дерева, какой же длины будет путь?
И наоборот, зная длину пути в дереве, можно приблизительно (в пределах степени двойки от длины) вычислить число элементов. Что тоже должно наталкивать на некоторые мысли, как же мы можем знать приблизительно длину списка, прочитав скажем только один элемент?