Cremallera como estructura de datos con más de un cursor

La estructura de datos de Zipper es excelente cuando se quiere atravesar un árbol y mantener la posición actual, pero ¿qué estructura de datos se debe usar si desean rastrear más de una posición?

Déjame explicarte con ejemplos:

Alguien en el canal #haskell me dijo que las cremalleras se usan en el editor yi para representar la posición del cursor. Esto es genial, pero ¿qué pasa si quieres tener dos cursores? Al igual que si desea representar una selección, necesita saber el principio y el final de la selección.En el ejemplo de Minotauro en wikilibros, usan Cremallera para representar la posición de Minotauro dentro del laberinto. Si quisiera agregar enemigos al laberinto, representar su posición con una Cremallera tendría tanto sentido.El último es realmente de mi mini proyecto donde todo comenzó: Como parte del aprendizaje de Haskell, estoy tratando de visualizar una estructura de árbol usando cairo y gth2hs. Esto ha ido bien hasta ahora, pero ahora me gustaría seleccionar uno o más de los nodos y poder, p. moverlos alrededor. Debido a que puede haber más de uno de los nodos seleccionados, no puedo usar la Cremallera como se define en los libros de texto.

Hay una solución trivial (¿ingenua?), Similar a la que habían usado en las primeras versiones de XMonad que involucra mapas finitos como se explicóaquí.

Es decir, p. en el caso de mi proyecto de ejemplo, almacenaría los nodos seleccionados en un mapa indexado y reemplazaría su representación en la estructura principal con los índices. Pero esta solución tiene muchas desventajas. Al igual que los explicados en el enlace anterior, o digamos nuevamente en el caso de mi ejemplo, deseleccionar todos los nodos requeriría buscar en todo el árbol.

Respuestas a la pregunta(2)

Su respuesta a la pregunta