[Haskell-cafe] case switch covering all possible constructor but still fails
Nathan Hüsken
nathan.huesken at posteo.de
Sat Apr 13 11:42:48 CEST 2013
Hey,
I am trying to fix (or at least get my head around) this:
https://github.com/valderman/haste-compiler/issues/27
Which is an issue of the haste haskell->javascript compiler. Doing so I
encounter this problem which makes me think I am not understanding
something fundamental here (and I believe this not to be haste specific)...
OK, the problem is that this code:
genAlt :: Bool -> JSVar -> JSVar -> StgAlt -> JSGen Config JSAlt
genAlt tailpos scrut res (con, args, used, body) = do
construct <- case con of
DEFAULT -> return Def
LitAlt l -> Cond <$> genLit l
DataAlt c | Right tag <- genDataConTag c -> return $ Cond tag
_ -> error "Bad data constructor tag generated!"
Looking at StgAlt, I conclude that con must be of type AltCon, which is
defined like this (from CoreSyn.lhs of the ghc source):
data AltCon
= DataAlt DataCon
| LitAlt Literal
| DEFAULT
deriving (Eq, Ord, Data, Typeable)
What I do not understand: The case switch covers all possibilities of
AltCon. So how can this happen?
Using trace, the con seemed to have the type "GHC.Integer.Type.S#" in
the case of the erro.
Thanks!
Nathan
More information about the Haskell-Cafe
mailing list