2012-07-10 15 views
13

Estoy haciendo un buen número de matrices cuyo tipo de índice es Bounded y cuyo rango de índice es (minBound, maxBound). Para una matriz así, una verificación de límites debería ser innecesaria. ¿Cómo puedo convencer a GHC para que elimine la verificación de límites?¿Eliminar los límites de la matriz de Haskell para comprobar el tipo limitado?

Mi aplicación particular utiliza matrices inmutables en caja y sin caja, pero estoy interesado en todos los tipos de matrices Haskell.

+2

Bueno, ¿qué tipo de matriz es? ¿Es solo 'Data.Array.IArray'? –

Respuesta

13

importación Data.Array.Base, calcular el índice del elemento deseado Int, y utilizar

someArray `unsafeAt` computedIndex 

para evitar la gama-check (unsafeRead y unsafeWrite para matrices mutables). El cálculo del índice Int sin verificación de rango debe estar disponible a través de de la clase Ix si import GHC.Arr.

Si la instancia Ix de su tipo de índice no proporciona una función unsafeIndex rápida desmarcada, tiene que escribirla usted mismo. Eso puede ser preferible de todos modos ya que su rango (minBound, maxBound) es constante y no necesita pasar al cálculo del índice.

Cuestiones relacionadas