scope in ghci

S.D.Mechveliani mechvel@math.botik.ru
Fri, 05 Oct 2001 15:14:15 +0400


Dear GHC,

Consider the following question concerning scopes in  
ghc -interpreted. 

A large application called  D  consists of 70 modules, 
it reexports all its public items via module  DExport.
It has also demonstration examples            Dm1.hs ... Dm9.hs.
Each example imports 4-5 modules from  D
and lists precisely the imported items, like this:
                                        import List (sort) 
                                        import Foo1 (f, g, Dt(..)) 

There also exists the total  Dm.hs  which reexports   
Dm1 ... Dm9  and adds the total `test' function.

All this compiles successfully (Dm* may skip compilation).

Then,          ghci -package D  Dm1
               ...
               Dm1> sort $ dm1 [1%2,1%3]    -- contrived example
is impossible.
Instead, it needs        
            Dm1> List.sort Prelude.$ dm1 [1 Ratio.% 2, 1 Ratio.% 3]

Also the user is expected to command     :m DExport
and work with other modules than  Dm*.

I try to improve this as follows. Add

  (...module Prelude, module List, module Ratio, module Random...)

  import Prelude; import List; import Ratio; import Random;
    
to  DExport.hs
and replace the import part in  Dm1.hs ... Dm9.hs
with
                       import DExport

Formally, everything works. But I doubt.
DExport imports and exports so many things that it looks natural 
to add all the standard Haskell library to it.
But the imports of  Dm1.hs ... Dm9.hs  are different.
I wonder, what is the difference between
                                 M.hs:  ...import Foo (f,g)
and                              N.hs:  ...import DExport 

First, suppose  M.hs  contains name clashes with  DExport  
and wants to avoid qualified names.
Second, when compiling  M.hs  the name search is smaller
(would it compile any essentially faster?). 
Third, how GHC will react at                 :load Dm
?
By occasion, would not it load 9 copies of DExport ?
Shortly: is this all right to set  import DExport
to all the above  Dm* ?

Thanks to everyone for possible advice.

-----------------
Serge Mechveliani
mechvel@botik.ru