15

我正在制作很多数组,其索引类型为Bounded,其索引范围为(minBound, maxBound). 对于这样的数组,边界检查应该是不必要的。如何说服 GHC 取消边界检查?

我的特定应用程序同时使用装箱和未装箱的不可变数组,但我对所有类型的 Haskell 数组都感兴趣。

4

1 回答 1

14

导入Data.Array.Base,计算Int所需元素的索引,然后使用

someArray `unsafeAt` computedIndex

避免范围检查(unsafeReadunsafeWrite可变数组)。如果. Int_ _ _ _unsafeIndexIximport GHC.Arr

如果Ix您的索引类型的实例不提供快速的未检查unsafeIndex功能,则您必须自己编写它。无论如何,这可能更可取,因为您的范围(minBound, maxBound)是恒定的并且不需要传递给索引计算。

于 2012-07-10T11:18:46.210 回答