13
我制作了很多索引类型为Bounded
,索引范围为(minBound, maxBound)
的阵列。对于这样的数组,边界检查应该是不必要的。我如何说服GHC消除边界检查?消除Haskell数组边界检查有界类型?
我的特定应用同时使用装箱和取消装箱不变的数组,但我感兴趣的各类哈斯克尔阵列。
我制作了很多索引类型为Bounded
,索引范围为(minBound, maxBound)
的阵列。对于这样的数组,边界检查应该是不必要的。我如何说服GHC消除边界检查?消除Haskell数组边界检查有界类型?
我的特定应用同时使用装箱和取消装箱不变的数组,但我感兴趣的各类哈斯克尔阵列。
导入Data.Array.Base
,计算Int
索引所需的元件,并且使用
someArray `unsafeAt` computedIndex
避免范围校验(unsafeRead
和unsafeWrite
为可变阵列)。在Int
指数无范围检查计算应通过unsafeIndex
可从Ix
类,如果你import GHC.Arr
。
如果您的索引类型的Ix
实例未提供快速未经检查的unsafeIndex
函数,则必须自己编写它。无论如何,这可能是更可取的,因为你的范围(minBound, maxBound)
是常量,不需要传递给索引计算。
那么,它是什么数组类型?它只是'Data.Array.IArray'? – 2012-07-10 11:13:04