instance export decls

Serge D. Mechveliani mechvel at
Tue Apr 22 08:32:44 EDT 2008

Dear GHC developers, people,

Do you agree that there exists such a problem for a programmer as 
recalling exported instances?
Have Haskell and/or GHC some constructs and tools to help the programmer 
to recall the exported instances for a module? 
Could GHC support the instance export messages for each module?

In Haskell-98, the exported instances cannot be named explicitly in the
export list.
But for easier understanding of a program, it is desirable to allow to 
name (in a short form) instances in the export list. 
For this reason, I add comments, and write the export like this:

  module Poly 
  (WithHead(..), WithTail(..), -- classes
   Mon(..), Polynomial(..),
   lc, polMons
   -- , instances
   -- for Mon:         WithHead, List;
   -- for Polynomial:  WithHead, Cast Polynomial Mon  
The comment of kind  "-- , instances ..."   
helps to recall which instances are exported, without inspecting all 
the (lengthy) module source. 

But when the programmer changes the source, one often forgets to 
add/remove the needed comments about instances.
I often forget them (maybe, lazy to recall) when I move pieces of code 
between modules.

So, I suggest the following feature for GHC.

1. To allow the export declarations of kind   instance {<type>}
   (maybe to suggest this for Haskell ?)
2. If the module under compilation has the word `instance' in its 
   export list,  
   then  ghc  finds the difference set  diff  for the exported instance 
   kinds  eKinds  and the instance kinds  nKinds  named in the export
   list. If  not $ null diff,  it issues the message:
   "Warning:  the exported instance kinds and the instance kinds named 
              in the export differ in the following items: ...".

Seeing such a message, the user corrects the export list in the source 
according to  diff.

For the export list and for their messages, it is probably better to 
use a short denotation: the instance kind rather than full instance 
declaration. In the instance kind, the part of "(...) =>" is skipped.

What people think of this suggestion?

Thank you in advance for your notes and help,

Serge Mechveliani
mechvel at


More information about the Glasgow-haskell-users mailing list