
Digging around in the source code comments, I found a restriction that is biting me:
We *insist* that all overloaded type variables are specialised to ground types, (and hence there can be no context inside a SPECIALIZE pragma).
The latter is fine, but the former seems too restrictive. For example, a function with constraints (Storable a, Eq a) can't be specialized to Ptr b, even though b would be unconstrained. Any hope of relaxing this?

On Thu, Jun 17, 2004 at 10:53:28AM +0100, I wrote:
Digging around in the source code comments, I found a restriction that is biting me:
We *insist* that all overloaded type variables are specialised to ground types, (and hence there can be no context inside a SPECIALIZE pragma).
The latter is fine, but the former seems too restrictive. For example, a function with constraints (Storable a, Eq a) can't be specialized to Ptr b, even though b would be unconstrained. Any hope of relaxing this?
After a bit of experimentation: if we have f :: (Storable a, Eq a) => T a {-# SPECIALIZE f :: T (Ptr a) #-} not only do we not get the requested polymorphic specialization, but if we use f at the ground types T (Ptr Foo) and T (Ptr Bar), we get a specialization for each, and these are essentially the same. Is there any reason not to generate the polymorphic one?
participants (1)
-
Ross Paterson