Структура данных на молнии с более чем одним курсором

Структура данных Zipper хороша, когда нужно пройтись по дереву и сохранить текущую позицию, но какую структуру данных следует использовать, если они хотят отслеживать более одной позиции?

Позвольте мне объяснить с примерами:

Кто-то на канале #haskell сказал мне, что в редакторе yi для отображения позиции курсора используются молнии. Это здорово, но что, если вы хотите иметь два курсора. Например, если вы хотите представить выборку, вам нужно знать начало и конец выборки.В примере Минотавра на вики-книгах они используют Застежку-молнию, чтобы представить положение Минотавра в лабиринте. Если бы я хотел добавить противника в лабиринт, то представлять его положение с помощью молнии было бы как нельзя лучше.Последний из моего мини-проекта, с которого все началось: как часть изучения Haskell, я пытаюсь визуализировать древовидную структуру, используя cairo и gth2hs. Пока все прошло хорошо, но сейчас я бы хотел выбрать один или несколько узлов и иметь возможность, например, переместить их. Поскольку может быть более одного из выбранных узлов, я не могу просто использовать застежку-молнию, как определено в учебниках.

Существует тривиальное (наивное?) Решение, подобное тому, которое они использовали в ранних версиях XMonad, которое включает в себя конечные карты, как объясненоВот.

То есть, например, в случае моего примера проекта я бы сохранил выбранные узлы в индексированной карте и заменил их представление в основной структуре индексами. Но это решение имеет множество недостатков. Как и те, которые описаны в ссылке выше, или, скажем, снова в случае моего примера, отмена выбора всех узлов потребует поиска по всему дереву.

Ответы на вопрос(2)

Ваш ответ на вопрос