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 > | [EMAIL PROTECTED] > _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users