In a pattern binding:ghc: panic! (the 'impossible' happened): Bogus selector Id
Hello,
This is my first bug report for GHC. I encountered a type error when compiling my program that said to report the error as a bug here. I tried searching for similar bugs, but could not find any bugs with the same problem.
I'm sorry in advance if I have misunderstood anything or if there indeed are any duplicates of this problem!
The error output
src/app/Templates/Pages.hs:214:17:
Constructor `Image' does not have field `filepath'
In the pattern: Image {filepath = fp}
In a pattern binding: Image {filepath = fp} = logo
In an equation for `renderLogo':
renderLogo (Design {mlogo = (Just logo)})
= H.a ! A.href "/" ! A.class_ "navbar-brand"
$ H.img ! A.src (toValue fp)
where
Image {filepath = fp} = logo
src/app/Templates/Pages.hs:214:34:
Couldn't match expected type `Field' with actual type `Image'
In the expression: logo
In a pattern binding:ghc: panic! (the 'impossible' happened)
(GHC version 7.6.3 for x86_64-unknown-linux):
Bogus selector Id
Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
When/why does this happen?
I encountered this problem when I accidentally imported a field in a data named "Image" from module A, and imported the constructor of a different data structure from a different module also named "Image".
I guess the type error itself is valid since it doesn't make sense to do what I did, but the way GHC handles this corner case internally is the source of the panic.
Here are my imports:
import Data.Image (Image(filepath))
import Data.Form (Field(..), FieldResult(..))
Data.Image contains the data structure Image, whereas Data.Form contains the data structure Field which has a constructor named Image.
Here is the the data structure in Data.Image:
data Image = Image
{ id :: Integer
, categoryId :: Integer
, name :: String
, filepath :: String
, createdAt :: LocalTimestamp
} deriving (Show)
And here is the data structure in Data.Form:
data Field
= Password Name Label
| Text Name Label Value
| Email Name Label Value
| InlineArea Name Label Html
| Hidden Name Value
| Image Name Label
| Select Name Label [SelectItem] SelectedId
| CheckBox Name Label Selected
And here is the line I use the filepath field in my template file:
where Image{filepath = fp} = logo
Can this GHC panic be avoided?
Yes, by specifically importing from the same module. Like so:
import Data.Image (Image(Image, filepath)
import Data.Form (Field(InlineArea), FieldResult(..))
If there is anything more I can do to help, just let me know!
Thank you Richard Zetterberg
Trac metadata
Trac field | Value |
---|---|
Version | 7.6.3 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |