On Jun 22, 2007, at 3:11 PM, Brandon S. Allbery KF8NH wrote:

(1) any way to flag a pattern match as "I know this is okay", don't warn about it" without shutting off pattern match warnings completely?

GHC doesn't issue warnings about patterns on the left of =

For example, the following code compiles just fine with ghc -Wall - Werror, but the use of "Just m" generates a run-time exception:

module Main where

a :: [(Int,Int)]
a = [(2*n,n) | n <- [1..100]]

m :: Int
Just m = lookup 3 a

main :: IO ()
main = putStrLn $ show m

I'd take this as a ghc feature, not a bug. When I use this construct in practice, I have a proof in mind that the pattern match cannot fail for my data, but I can't express the proof in Haskell's type system. I'm ok with skipping writing that proof.

The difference here is programmer intent. While a missing pattern case can often be an oversight, there's no way to put both cases here to the left of =, so the programmer clearly intends this code as written.

(An example of a language with a Turing complete type system is Qi: http://www.lambdassociates.org/ As pointed out elsewhere in this thread, it is unreasonable/ undecidable to expect a type system to work out arbitrarily difficult issues for you automatically. Some work is required, programming in the type system. They extend this point of view.)


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to