
On Thu, May 01, 2008 at 03:21:11PM +0100, Simon Peyton-Jones wrote:
Indeed! I think it'd be good to allow type signatures, including instance signatures, in export lists
module Foo( data T (f :: * -> *), instance Functor f => Eq (T f), g :: T f -> T f )
The first step is to evolve a well-worked-out design. I think that'd be a very valuable thing for someone to do. Indeed, I'd really like to see it in Haskell', but it doesn't meet the "tried and tested" criterion.
Maybe, the GHC developers will first try it in GHC ?
I'm a bit reluctant to invest effort in half-way-house solutions, though.
My idea was that the GHC developers may like to convert my suggestion into a carefully designed one and to implement it.
| Behalf Of Serge D. Mechveliani | Sent: 22 April 2008 13:33 | To: glasgow-haskell-users@haskell.org | Subject: instance export decls | | 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. | Right? | 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@botik.ru