I recentl changed the scoring system used by dependency analysis for
recursive bindings, that it used the *form* of the RHS of a binding,
rather than just its type. In doing so I inadvertently made recursive
dictionary bindings unravel less well, because I'd missed the case
of c = /\a. C (...) (...)
This patch fixes the problem. A good example is the instance for
Monad (ST s) or Show (ST s a) in GHC.ST. It's vital for these
dictionaries to be inlinable.
-- But we won't because constructor args are marked "Many".
-- Cheap and cheerful; the simplifer moves casts out of the way
+ -- The lambda case is important to spot x = /\a. C (f a)
+ -- which comes up when C is a dictionary constructor and
+ -- f is a default method.
+ -- Example: the instance for Show (ST s a) in GHC.ST
is_con_app (Var v) = isDataConWorkId v
is_con_app (App f _) = is_con_app f
+ is_con_app (Lam b e) | isTyVar b = is_con_app e
is_con_app (Note _ e) = is_con_app e
is_con_app other = False