Устранить проверку границ массива Haskell для ограниченного типа?
Я делаю достаточно много массивов, чей тип индекса Bounded
и чей диапазон индекса (minBound, maxBound)
, Для такого массива проверка границ должна быть ненужной. Как я могу убедить GHC отменить проверку границ?
Мое конкретное приложение использует как коробочные, так и распакованные неизменяемые массивы, но меня интересуют все типы массивов Haskell.
1 ответ
Импортировать Data.Array.Base
вычислить Int
индекс нужного элемента и использовать
someArray `unsafeAt` computedIndex
чтобы избежать проверки диапазона (unsafeRead
а также unsafeWrite
для изменяемых массивов). Вычисление Int
Индекс без проверки диапазона должен быть доступен через unsafeIndex
от Ix
класс, если вы import GHC.Arr
,
Если Ix
экземпляр вашего типа индекса не обеспечивает быстрый непроверенный unsafeIndex
функция, вы должны написать это самостоятельно. Это может быть предпочтительнее, так как ваш диапазон (minBound, maxBound)
является постоянным и не нуждается в передаче для вычисления индекса.