Andrew J Bromage <[EMAIL PROTECTED]> wrote: > G'day all. > On Wed, Feb 05, 2003 at 08:05:56PM -0600, Jon Cast wrote:
> > I'm not sure I follow this. If you change the type of a value exported > > from a given module, that's a public change, no? And if you don't, why > > should re-compilation be needed? > Consider this: > << > module A where > import B > {- use B.b -} > >> > << > module B (b) where > import C > b = C.c > >> > << > module C (c) where > c :: Int > >> > Changing the type of c requires recompiling module A. > You would expect that changing c's type forces a recompilation of B, > since you changed C's public interface. However, this also changes > B's public interface even though you did not touch the text of module > B. The reason is that B's public interface is partly based on modules > which it _privately_ imports, even if it does not re-export any > symbols from those modules. I think I see what you're saying. I still maintain, however, that, since you've changed the type of B.b (admittedly implicitly), and B.b is exported from B, that you've changed B's interface. There is a reason make is designed to re-build B /and/ (potentially) A when C changes, after all. > One fix is to require all exported symbols to have explicit type > declarations. Since this is good practice anyway, I would be in > favour of making it a language requirement in Haskell 2. > Cheers, > Andrew Bromage Jon Cast _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe