<div dir="ltr"><div>I'm trying to sort out the relationship of GHC rewrite rules and constructor wrappers. I have rules like<br><br>> "reify/(:<)" reifyEP (:<) = kPrim VecSP<br><br>This rule seems to fire for `reifyEP ($W:<)` rather than `reifyEP (:<)`. If I'm tracking (uncertain), `($W:<)` inlines to `(:<)`. Sometimes I'm able to preserve the `$W` form, but sometimes I get the bare form when inlining a definition from another already-compiled module. In those cases, I don't know how to get my rules to fire.<br>

<br>Advice and explanation appreciated, including pointers explanations of the role of these wrappers in GHC.<br><br></div>-- Conal<br><div><br></div></div>