Existiert eine nützliche Haskell HashMap / HashTable / Dictionary-Bibliothek?
Ich suche eine monadenfreie, ständige ZugriffsabfrageO (1) assoziatives Array.
Betrachten Sie den hypothetischen Typ:
data HT k v = ???
Ich möchte einmal eine unveränderliche Struktur erstellen:
fromList :: Foldable t, Hashable k => t (k,v) -> HT k v
Ich möchte es später wiederholt mit ständigem Zugriff abfragen ::
lookup :: Hashable k => HT k v -> k -> Maybe v
Es scheint zwei Bibliothekskandidaten zu geben, die zu kurz kommen:
unordered-containers
unordered-containers
enthält sowohl strenge als auch faule Varianten des TypsHashMap
. BeideHashMap
rasierenO (log n) Abfragen wie von der @ dokumentielookup
Funktion. Diese Abfragezugriffszeit scheint auf die Konstruktion des @ zurückzuführen zu seiHashMap
-Typen, die eine interne Baumstruktur haben, die @ zuläsO (log n) insert
Funktionalität. Ein verständlicher Design-Kompromiss für viele Anwendungsfälle, aber da ich kein veränderliches @ benötiHashMap
dieser Kompromiss behindert meinen Anwendungsfall.
hashtables
hashtables
enthält einHashTable
type-class und drei Instanztypen mit unterschiedlichen Tabellenkonstruktionsstrategien. Die Typklasse dieser Bibliothek definiert eine konstante ZeitO (1) lookup
Funktionsdefinition, aber es ist ewig in die @ eingebettST
Monade. Es gibt keine Möglichkeit, das zustandsbehaftete @ "einzufrieren"HashTable
Implementierungen und haben einlookup
-Funktion, die nicht in eine Stateful-Monade eingebettet ist. Die Typklassenschnittstelle der Bibliothek ist gut gestaltet, wenn die gesamte Berechnung in eine Statusmonade eingeschlossen ist, aber dieses Design ist für meinen Anwendungsfall ungeeignet.
Gibt es eine andere Bibliothek, die Typen und Funktionen definiert, die eine unveränderliche konstante Zugriffsabfrage erstellen können?O (1) assoziatives Array, das nicht in eine zustandsbehaftete Monade eingebettet ist?
Gibt es eine Möglichkeit, diese vorhandenen Hashing-basierten Bibliotheken zu umschließen oder zu ändern, um eine unveränderliche Abfrage für den konstanten Zugriff zu erstellen?O (1) assoziatives Array, das nicht in eine zustandsbehaftete Monade eingebettet ist?