Empty case expressions like `case evalP @ (Pair Int) ds of wild { }` are only valid if the scrutinee is bottom, see CoreLint.hs for how exprIsBottom is used and CoreUtils.hs for how it's defined. So it seems like the simplifier somehow figured that `evalP @ (Pair Int) ds` is bottom, and generated an empty case.
Is the linter complaining about this case expression? (you can try it using CoreLint.lintExpr) 2016-03-11 16:49 GMT-05:00 Conal Elliott <co...@conal.net>: > > I'm working on a GHC plugin, mainly in the form of a "builtin" rewrite rule, > and I'm seeing a strange disappearance of a case alternative. With > -ddump-rule-rewrites, I can see before & after the disappearance: Here's one > rule firing with the alternative present: > > Rule fired > Rule: reify > Before: reifyP > TyArg Pair Int -> Int > ValArg \ (ds :: Pair Int) -> > case ds of _ { :# a b -> $fNumInt_$c+ a b } > After: lamP > @ (Pair Int) > @ Int > "ds"# > (\ (ds :: EP (Pair Int)) -> > reifyP > @ Int > (case evalP @ (Pair Int) ds of _ { :# a b -> > $fNumInt_$c+ a b })) > Cont: StrictArg toE > Stop[BoringCtxt] E Prim (Pair Int -> Int) > > The next thing I see is the rule firing again on the residual reifyP > application, but with the case alternative gone: > > Rule fired > Rule: reify > Before: reifyP > TyArg Int ValArg case evalP @ (Pair Int) ds of wild { } > After: ... > > Any ideas what's causing the disappearance? > > Thanks. - Conal > > > _______________________________________________ > ghc-devs mailing list > ghc-devs@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs > _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs