消除Haskell数组边界检查有界类型?

Nor*_*sey 15 arrays haskell ghc bounds-check-elimination

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

我的特定应用程序使用盒装和非盒装不可变数组,但我对所有类型的Haskell数组感兴趣.

Dan*_*her 14

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

someArray `unsafeAt` computedIndex
Run Code Online (Sandbox Code Playgroud)

避免范围检查(unsafeRead以及unsafeWrite可变数组).Int没有范围检查的索引的计算应该可以unsafeIndexIx课程中获得import GHC.Arr.

如果Ix索引类型的实例未提供快速未选中的unsafeIndex功能,则必须自己编写.无论如何,这可能是更可取的,因为您的范围(minBound, maxBound)是常量,不需要传递给索引计算.