Add new ForceSpecConstr annotation
Annotating a type with {-# ANN type T ForceSpecConstr #-} makes SpecConstr
ignore -fspec-constr-threshold and -fspec-constr-count for recursive functions
that have arguments of type T. Such functions will be specialised regardless
of their size and there is no upper bound on the number of specialisations
that can be generated. This also works if T is embedded in other types such as
Maybe T (but not T -> T).
T should not be a product type because it could be eliminated by the
worker/wrapper transformation. For instance, in
data T = T Int Int
foo :: T -> Int
foo (T m n) = ... foo (T m' n') ...
SpecConstr will never see the T because w/w will get rid of it. I'm still
thinking about whether fixing this is worthwhile.