2012-07-10 21 views
13

Kimin indeks tipi Bounded olduğunu ve kimin indeks aralığı (minBound, maxBound) iyi bir sayıda diziler yapıyorum. Böyle bir dizi için, sınır kontrolünün gereksiz olması gerekir. Sınırları elemek için GHC'yi nasıl ikna edebilirim?Sınırlı tip için Haskell dizi sınırlarını eleyin mi?

Benim özellikle uygulama hem kutulu ve kutusuz değişmez diziler kullanır, ancak ben Haskell dizileri her türlü ilgileniyorum.

+2

Peki, hangi dizi türü nedir? Sadece Data.Array.IArray' mı? –

cevap

13

Alma Data.Array.Base, arzu edilen elemanın Int endeksi hesaplamak ve (değişken dizileri için unsafeRead ve unsafeWrite) aralık-çek önlemek için

someArray `unsafeAt` computedIndex 

kullanın. aralık kontrolü olmadan Int endeksinin hesaplamaIx sınıfın eğer import GHC.Arr den unsafeIndex yoluyla ulaşılabilir olmalıdır.

Dizin türünüzün Ix örneği, hızlı bir şekilde işaretlenmemiş unsafeIndex işlevini sağlamazsa, bunu kendiniz yazmanız gerekir. (minBound, maxBound) aralığınız sabit olduğundan ve dizin hesaplamasına geçirilmeniz gerekmediğinden bu tercih edilebilir.