[Haskell-cafe] "Bounds checking" pragma?

Artyom Kazak artyom.kazak at gmail.com
Thu Nov 10 00:35:07 CET 2011


The (!) operator is short and nice. Unfortunately, when doing heavy  
computing, we have to use "unsafeAt" instead. It looks ugly and it is  
ugly, also.

Some compilers for imperative languages like Free Pascal have an option to  
turn on/off bounds checking for arrays. Wouldn't it be nice to have such  
option in GHC? Is it possible?

There is a problem: Haskell has a lot of array libraries. The only  
solution I see is a new FLAG pragma:

	(!) :: Array i a -> i -> a

         {-# FLAG "boundsCheck"     (!) = unsafeAt #-}

It is similar to RULES pragma, but only fires when flag is set. To set the  
flag you need to complile with option -flags="boundsCheck". Also, the  
mantainers of vector library, bytestring library, repa library and so on  
will have to include such pragmas in their code.

I don't know about C++ preprocessor, though. Maybe this is already  
solvable with #define's...

Anyway, I have to say it once again: unsafeAt is ugly and Haskell is  
beautiful. Why high-performance code should be ugly?

More information about the Haskell-Cafe mailing list