+Why (b)? See Trac #4874 for persuasive examples. Suppose we have
+ {-# INLINABLE f #-}
+ f :: Ord a => [a] -> Int
+ f xs = letrec f' = ...f'... in f'
+Then, when f is specialised and optimised we might get
+ wgo :: [Int] -> Int#
+ wgo = ...wgo...
+ f_spec :: [Int] -> Int
+ f_spec xs = case wgo xs of { r -> I# r }
+and we clearly want to inline f_spec at call sites. But if we still
+have the big, un-optimised of f (albeit specialised) captured in an
+INLINABLE pragma for f_spec, we won't get that optimisation.
+
+So we simply drop INLINABLE pragmas when specialising. It's not really
+a complete solution; ignoring specalisation for now, INLINABLE functions
+don't get properly strictness analysed, for example. But it works well
+for examples involving specialisation, which is the dominant use of
+INLINABLE. See Trac #4874.
+