[Haskell-cafe] Best idiom for avoiding Defaulting warnings with ghc -Wall -Werror ??

Dave Bayer bayer at cpw.math.columbia.edu
Mon Jun 25 11:03:35 EDT 2007


On Jun 25, 2007, at 4:48 AM, Simon Peyton-Jones wrote:

> The intention is that it should be straightforward to suppress  
> warnings.

> Simply add a type signature for 'z', or for the naked 3 in z's  
> definition.

I constructed my example from larger modules peppered with small  
integer constants; such signatures would become a significant  
percentage of the code. I was hoping for a solution whose code size  
is at worst linear in the number of distinct integer constants used,  
not the number of times they are used. I'd like to avoid redefining  
operators if I can help it.

Given that there are entire languages in common use that don't  
support Integer, I don't see why "ghc -Wall -Werror" can't become  
such a language when it sees

> default (Int)

Instead it issues defaulting warnings even in the presence of this  
declaration.

I couldn't find a way to add a type signature once for each small  
integer constant I plan to use; it would appear to me that

> 2,3 :: Int

by itself is not legal Haskell. The best I can do is to instead write

> i2,i3 :: Int
> (i2,i3) = (2,3)

which imposes a per-use penalty of one character per use, and is less  
readable than simply unrolling the constants in each use. In other  
words, if I can't write x^3, I find x*x*x more transparent than x^i3  
or x^(3::Int).

Despite my participation in a broader discussion, my hope in starting  
this thread was to understand how to most elegantly use the specific  
programming language "ghc -Wall -Werror".

It continues to appear to me that "ghc -Wall -Werror" doesn't support  
small Int constants without a per-use penalty, measured in code length.

On Jun 25, 2007, at 4:48 AM, Simon Peyton-Jones wrote:
> I think it matters what type is chosen, because it affects the  
> output of the program; it's good practice to be explicit about what  
> type you want, at each site where defaulting is applied.

I agree, so I'm glad I asked here rather than reporting warnings in  
the presence of "default (Int)" as a bug.

Unless I misunderstand and it is already possible, I'd now prefer a  
language extension that allows the explicit declarations

> 2,3 :: Int

once for each affected numeric literal.

  


More information about the Haskell-Cafe mailing list