| SPECIALISE pragmas are not supported in any but the defining module
| because the Core for a function to specialise is not guaranteed to be
| available in any other module. I don't think there is any other
| barrier.

Yes, exactly.

| It is possible to imagine implementing a remedy for this by using
| -fexpose-all-unfoldings and having GHC use the exposed Core to
| generate a specialisation in any importing module.

Indeed, I've often thought of such a feature.  It would be a Good Thing.

But some care would be needed.  Currently GHC's "-fexpose-all-unfoldings" makes 
no attempt to ensure that the exposed unfolding for f is exactly what the user 
originally wrote.  For example, other functions might  have been inlined into 
f's RHS that might make it a lot bigger.  Maybe you'd want to say

        {-# SPECIALISABLE f #-}
        f = <blah>

to mean "expose f's unfolding, pretty much as-is, rather than optimising it".  
This is close to what you get with

        {-# INLINE f #-}

(which also exposes the original RHS) but without the "please inline me at 
every call site" meaning.  Hmm.  Oh if I had more time.

But as of today, no it just isn't supported.  Another ticket! 
http://hackage.haskell.org/trac/ghc/ticket/4227

Simon
_______________________________________________
Glasgow-haskell-users mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to