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

hashtables

unordered-containers

unordered-containers enthält sowohl strenge als auch faule Varianten des TypsHashMap. BeideHashMaprasierenO (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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage