I'll repeat, just for the heck of it, that what I want is a type
something like:
diff :: forall A a. (A :> Floating, A a) =>
(forall b. A b => b -> b) -> b -> b
where A is quantified over all type classes, and :> denotes "is a
superclass of". The syntax is made up, of course, and entirely
unworkable since (:>) is a user-definable contructor name... but that's
the intuition anyway.
--
Chris Smith