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