
Good point, thank you! I'd forgotten that the OGI modules paper, which I read carefully at the time, covered recursion (Section 5.4). But my real point wasn't that it's impossible to define a meaning, only that the meaning might be a bit unexpected to a programmer, and involves a fixpoint calculation (which the paper indeed performs). It does also require the scope-resolver to process the whole of a strongly-connnected component of modules at a time, which GHC isn't set up to do. That's an engineering issue, not a semantic one, though. Simon | -----Original Message----- | From: Thomas Hallgren [mailto:hallgren@cse.ogi.edu] | Sent: 18 January 2005 22:12 | To: Simon Peyton-Jones; glasgow-haskell-users@haskell.org | Cc: john@repetae.net | Subject: Re: self-import | | Simon Peyton-Jones wrote: | | >I quite liked this idea until I thought of this: | > | > module Doc.Pretty.Long( M.f, f ) where | > import qualified M( f ) | > import Doc.Pretty.Long as M | > | > f x = x | > | >The second import decl imports all the things exported by | >Doc.Pretty.Long. But what does it export? Well, M.f. But what is M.f. | >Well, it could be the f coming from 'import M.f'. But wait! | >Doc.Pretty.Long exports the locally-defined f too... and the second | >import decl will make that be called M.f too. | > | > | Our module system paper has answers to this type of questions, since it | deals with the meaning of recursive modules: | | http://www.cse.ogi.edu/~diatchki/hsmod/ | | It is implemented in the Programatica Haskell front-end, which thus | supports modules importing themselves in particular, and mutually | recursive modules in general, without the need for boot .hi files. I | wonder when other Haskell implementations are going to catch up? :-) | | -- | Thomas H
participants (1)
-
Simon Peyton-Jones