¿Qué bibliotecas existen que implementan estructuras de datos estrictas? Específicamente, estoy buscando listas estrictas y conjuntos estrictos.Bibliotecas para estructuras de datos estrictas en Haskell
Aviso legal:
soy consciente de deepseq. Es muy útil, pero agrega la sobrecarga de atravesar toda la estructura de datos cada vez que usa deepseq (que puede ser más de una vez).
Soy consciente de que una estructura de datos tipo contenedor estricta no garantizar todo lo que contiene será evaluado completamente, pero la estructura sí debe ser estricta, por ejemplo:
data StrictList a = !a :$ !(StrictList a) | Empty
(Aquí, el los elementos contenidos están en WHNF, y posiblemente no se evalúan por completo, pero la estructura de la lista es. Por ejemplo, las listas infinitas serán valores no terminadores.)
Conozco el paquete 'estricto' sobre pirateo, pero tiene un límite muy d conjunto de estructuras de datos estrictas. No contiene listas ni conjuntos estrictos .
escribir listas estrictas mismo parece sorprendentemente fácil (me encanta extensiones de GHC para derivar Functor, de Traversable y plegable, por cierto.), Pero todavía parece que sería mejor hacerlo en una biblioteca independiente. Y implementaciones eficientes de conjuntos no me parecen tan triviales.
¿Por qué necesita una estructura estricta? – fuz
@FUZxxl asegurando que las cosas se evalúan sin demora a menudo puede reducir el uso de espacio y hacer cálculos mucho más rápido. También puede tener el efecto inverso, por lo que las estructuras perezosas también son importantes. Para un código eficiente, necesita ambos (y debe saber/averiguar cuál usar dónde). –
@FUZxxl: Estaba haciendo cosas parecidas a una mónada de estado en un conjunto en el que insertaba y eliminaba elementos del conjunto muy a menudo, pero no evaluaba el conjunto durante un tiempo. Esto dio lugar a una fuga de espacio, que podría ser arreglada por estructuras de datos rigurosas (gracias, John L). – shahn