2012-07-10 12 views
13

मैं एक अच्छा कई एरे बना रहा हूं जिसका सूचकांक प्रकार Bounded है और इसकी अनुक्रमणिका सीमा (minBound, maxBound) है। इस तरह के एक सरणी के लिए, एक सीमा जांच अनावश्यक होना चाहिए। सीमा शुल्क को खत्म करने के लिए मैं जीएचसी को कैसे राजी कर सकता हूं?बास्क प्रकार के लिए हास्केल सरणी सीमाओं को हटा दें?

मेरा विशेष एप्लिकेशन बॉक्सिंग और अनबॉक्स किए गए अपरिवर्तनीय सरणी दोनों का उपयोग करता है, लेकिन मुझे सभी प्रकार के हास्केल सरणी में रूचि है।

+2

अच्छा, यह किस प्रकार का सरणी है? क्या यह सिर्फ 'Data.Array.IArray' है? –

उत्तर

13

आयात Data.Array.Base, गणना वांछित तत्व का Int सूचकांक, और

someArray `unsafeAt` computedIndex 

का उपयोग रेंज की जांच (unsafeRead और unsafeWrite परिवर्तनशील सरणियों के लिए) से बचने के लिए। बिना इंडेक्स की गणना कक्षा से unsafeIndex के माध्यम से import GHC.Arr पर उपलब्ध होनी चाहिए।

यदि Ix आपके इंडेक्स प्रकार का उदाहरण तेजी से अनचेक unsafeIndex फ़ंक्शन प्रदान नहीं करता है, तो आपको इसे स्वयं लिखना होगा। वैसे भी यह बेहतर हो सकता है क्योंकि आपकी रेंज (minBound, maxBound) स्थिर है और इंडेक्स गणना में पारित होने की आवश्यकता नहीं है।