+Note [Unused spec binders]
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+Consider
+ f :: a -> a
+ {-# SPECIALISE f :: Eq a => a -> a #-}
+It's true that this *is* a more specialised type, but the rule
+we get is something like this:
+ f_spec d = f
+ RULE: f = f_spec d
+Note that the rule is bogus, becuase it mentions a 'd' that is
+not bound on the LHS! But it's a silly specialisation anyway, becuase
+the constraint is unused. We could bind 'd' to (error "unused")
+but it seems better to reject the program because it's almost certainly
+a mistake. That's what the isDeadBinder call detects.
+
+Note [Const rule dicts]
+~~~~~~~~~~~~~~~~~~~~~~~
+A SpecPrag has a field for "constant dicts" in the RULE, but I think
+it's pretty useless. See the place where it's generated in TcBinds.
+TcSimplify will discharge a constraint by binding it to, say,
+GHC.Base.$f2 :: Eq Int, withour putting anything in the LIE, so this
+dict won't show up in the const-dicts field. It probably doesn't matter,
+because the rule will end up being something like
+ f Int GHC.Base.$f2 = ...
+rather than
+ forall d. f Int d = ...
+The latter is more general, but in practice I think it won't make any
+difference.
+