
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.