[Haskell-cafe] rewrite rules to specialize function according to type class?

Max Bolingbroke batterseapower at hotmail.com
Tue Feb 15 11:56:31 CET 2011


2011/2/15 Simon Peyton-Jones <simonpj at microsoft.com>:
> but currently any pragmas in a class decl are treated as attaching to the *default method*, not to the method selector:

I see. I didn't realise that that was what was happening. Personally I
find this a bit surprising, but I can see the motivation. Of course, a
sensible alternative design would be to have them control the
selectors, and then you could declare that you want your default
methods to be inlined like this:

{{{
class MyClass a where
  foo :: a -> a
  foo = default_foo

{-# INLINE default_foo #-}
default_foo = ... big expression ...
}}}

I think this design+workaround is slightly preferable to your proposal
because it avoids clients of a library defining a class from having to
write instances with decorated names. But maybe it's not such a big
win as to be worth making the change.

In any event, perhaps it would be worth warning if you write an INLINE
pragma for some identifier in a class declaration where no
corresponding default method has been declared, in just the same way
you would if you wrote an INLINE pragma for a non-existant binding?

Cheers,
Max



More information about the Haskell-Cafe mailing list