[Haskell-cafe] out-commented code vs. case with redundant pattern matches

Henning Thielemann lemming at henning-thielemann.de
Wed Nov 29 10:04:01 UTC 2017

Occasionally I have multiple implementations of the same task and want to 
choose one quickly but statically. I do not want to out-comment unused 
branches because they shall still be type checked. So far I used this 

    case 0::Int of
       0 -> putStrLn "A"
       1 -> putStrLn "B"
       _ -> putStrLn "C"

With ghc-8.0.2 and ghc-8.2.2 I get these warnings:

RedundantCase.hs:4:7: warning: [-Woverlapping-patterns]
     Pattern match is redundant
     In a case alternative: 0 -> ...

RedundantCase.hs:5:7: warning: [-Woverlapping-patterns]
     Pattern match is redundant
     In a case alternative: 1 -> ...

I thought that "redundant" means that the first two cases overlap with 
'_'. But if I replace '_' by '2' I get not only the non-exhaustive 
patterns warning but an additional redundancy warning on pattern '2'.

Is there a nice way to tell GHC that the unused branches are intended, 
without generally disabling overlapping patterns warning?

I mean, this one does not provoke any warnings:

    if True
      then putStrLn "X"
      else putStrLn "Y"

but is limited to two branches.

More information about the Haskell-Cafe mailing list