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

Dave Bayer bayer at cpw.math.columbia.edu
Fri Jun 22 20:39:10 EDT 2007


On Jun 22, 2007, at 4:37 PM, David Roundy wrote:

> You get strongly-typed code whether or not you enable warnings.

In my opinion it's delusional to think one is using strong typing if  
one doesn't enable warnings. All the puffing about the advantages of  
strong typing look pretty silly if code hangs up on an incomplete  
pattern. Let's remember that the other side of this debate is rather  
eloquent, be it Paul Graham or a Ruby enthusiast. People who don't  
worry so much about types believe that they get things done. Is using  
a strongly typed language like buying a hybrid car, it costs too much  
but you're helping with "maybe someday...?"

I refuse to drink the Kool-Aid and recite precisely what I'm told a  
type is in June, 2007; I'm hoping that types will evolve by the time  
I die. For types to evolves, we need to step back a few feet and  
think more loosely what a type really is.

If someone writes working code with incomplete patterns, they're  
effectively using a dependent type without being able to say so in  
Haskell. They're using a specialization of the type they claim to be  
using, in which the missing patterns are never needed. Filling in with

	_  -> error "I'm sweeping this under the rug so it's no longer the  
type system's problem"

just highlights the inadequacy of the type system. The code hangs  
either way, if the belief that this case doesn't happen is wrong. I'm  
more of a "Will the code hang or not?" kind of guy than "Will I be  
kicked out of the tree house if I use the wrong words for things?"  
kind of guy. The missing pattern that shouldn't happen is abstractly  
a type issue, whether we can get the compiler to lay off or not.

Similarly, the whole defaulting debate is good form/bad form  
considerations for how best to use types to automatically write code  
for us.

It all comes back to what I said before, types are compile-time  
proxies for run-time values. I'm nudging at compile-time, therefore  
I'm messing with types, not values.

If I go away and write in Lisp or Ruby, then return to Haskell with  
"ghc -Wall -Werror", it is glaringly obvious to me that the nudging I  
have to do to get things to work with warnings on has to do with  
types. I truly don't mind the nudging, it is very educational, but  
let's call a spade a spade?






More information about the Haskell-Cafe mailing list