2012-07-10 2 views
13

Ich mache eine gute Anzahl von Arrays, deren Indextyp Bounded ist und deren Indexbereich (minBound, maxBound) ist. Für ein solches Array sollte eine Schrankenprüfung nicht notwendig sein. Wie kann ich GHC überreden, den Schrankencheck zu beseitigen?Eliminieren Haskell Array-Grenzen überprüfen für gebundene Art?

Meine spezielle Anwendung verwendet sowohl Boxed und unverpackte unveränderliche Arrays, aber ich interessiere mich für alle Arten von Haskell-Arrays.

+2

Nun, welcher Array-Typ ist das? Ist es nur 'Data.Array.IArray'? –

Antwort

13

Import Data.Array.Base, berechnet den Int Index des Elements gewünscht wird, und

someArray `unsafeAt` computedIndex 

verwenden, um den Range-Check (unsafeRead und unsafeWrite für veränderbare Arrays) zu vermeiden. Die Berechnung des Int Index ohne Bereichsüberprüfung sollte über unsafeIndex aus der Ix Klasse verfügbar sein, wenn Sie import GHC.Arr.

Wenn die Ix Instanz Ihres Indextyps keine schnelle ungeprüfte unsafeIndex-Funktion bereitstellt, müssen Sie sie selbst schreiben. Das mag ohnehin vorzuziehen sein, da Ihr Bereich (minBound, maxBound) konstant ist und nicht an die Indexberechnung übergeben werden muss.

Verwandte Themen