[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