Устранить проверку границ массива 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) является постоянным и не нуждается в передаче для вычисления индекса.

Другие вопросы по тегам