Rejection of constant functions defined using conditional pattern matching
Hi,
The Haskell program below is rejected, although it is correct. GHC gives the following error message:
HASKELL/tricky.hs:12:1:
Multiple declarations of `Main.d3'
Declared at: HASKELL/tricky.hs:10:1
HASKELL/tricky.hs:11:1
HASKELL/tricky.hs:12:1
I agree that the definition of d3 is tricky and useless, but it seems to be valid. This example was exctracted from Haskell code automatically produced by an in-house code generator.
data Nat = D0 | Succ Nat
deriving (Show, Eq, Ord)
d1 :: Nat
d2 :: Nat
d3 :: Nat
d1 = (Succ D0)
d2 | D0 == D0 = D0
d3 | D0 /= D0 = D0
d3 | (Succ D0) == D0 = D0
d3 | (Succ D0) /= D0 = (Succ D0)
main = do
print d1
print d2
print d3
Best regards Hubert
Trac metadata
Trac field | Value |
---|---|
Version | 7.10.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | Linux |
Architecture | x86 |