我正在创建许多索引类型为Bounded
,索引范围为(minBound, maxBound)
的数组。对于这样的数组,边界检查是不必要的。如何说服GHC消除边界检查?
我的特定应用程序使用了包装和非包装的不可变数组,但我对所有类型的Haskell数组都感兴趣。
我正在创建许多索引类型为Bounded
,索引范围为(minBound, maxBound)
的数组。对于这样的数组,边界检查是不必要的。如何说服GHC消除边界检查?
我的特定应用程序使用了包装和非包装的不可变数组,但我对所有类型的Haskell数组都感兴趣。
导入 Data.Array.Base
模块,计算所需元素的 Int
索引,然后使用该索引获取元素。
someArray `unsafeAt` computedIndex
为避免范围检查(对于可变数组使用unsafeRead
和unsafeWrite
),可以使用Ix
类中的unsafeIndex
计算Int
索引而无需进行范围检查。如果您import GHC.Arr
,则应该能够使用此方法。如果您的索引类型的Ix
实例没有提供快速的未经检查的unsafeIndex
函数,则必须自行编写。这种情况可能更可取,因为您的范围(minBound,maxBound)
是常数,无需将其传递给索引计算。
Data.Array.IArray
吗? - Louis Wasserman