Fix reference to "Haskell 98"
[haskell-report.git] / report / modules.verb
index 84cab42..46cd095 100644 (file)
@@ -69,9 +69,25 @@ Because they are allowed to be mutually recursive,
 modules allow a program to be partitioned freely without regard to
 dependencies.
 
-The name-space for modules themselves is flat, with each module being associated
-with a unique module name (which are \Haskell{} identifiers
-beginning with a capital letter; i.e.~"modid").  
+\begin{haskellprime}
+A module name (lexeme "modid") is a sequence of one or more
+identifiers beginning with capital letters, separated by dots, with no
+intervening spaces.  For example, @Data.Bool@, @Main@ and
+@Foreign.Marshal.Alloc@ are all valid module names.
+
+@@@
+modid   ->  \hprime{\{conid @.@\}} conid       & (\tr{modules})
+@@@
+\indexsyn{modid}%
+
+Module names can be thought of as being arranged in a hierarchy in
+which appending a new component creates a child of the original module
+name.  For example, the module @Control.Monad.ST@ is a child of the
+@Control.Monad@ sub-hierarchy.  This is purely a convention, however,
+and not part of the language definition; in this report a "modid" is
+treated as a single identifier occupying a flat namespace.
+\end{haskellprime}
+
 There is one distinguished module, @Prelude@, which is imported into
 all modules by default (see Section~\ref{standard-prelude}), plus a
 set of standard library modules that may be imported as required
@@ -91,14 +107,12 @@ body   -> @{@ impdecls @;@ topdecls @}@
        | @{@ impdecls  @}@
        | @{@ topdecls @}@
 
-modid       -> conid
 impdecls     -> impdecl_1 @;@ ... @;@ impdecl_n        & (n>=1)
 topdecls     -> topdecl_1 @;@ ... @;@ topdecl_n        & (n>=1)
 @@@
 
 \indexsyn{module}%
 \indexsyn{body}%
-\indexsyn{modid}%
 \indexsyn{impdecls}%
 \indexsyn{topdecls}%
 
@@ -180,7 +194,7 @@ legal
 \bprog
 @
   module A( Mb.Maybe( Nothing, Just ) ) where
-    import qualified Maybe as Mb
+    import qualified Data.Maybe as Mb
 @
 \eprog
 Data constructors cannot be named in export lists except as subordinate names, because
@@ -389,7 +403,7 @@ name as a qualified import:
 @
   module Ring where
   import qualified Prelude    -- All Prelude names must be qualified
-  import List( nub )
+  import Data.List( nub )
 
   l1 + l2 = l1 Prelude.++ l2  -- This + differs from the one in the Prelude
   l1 * l2 = nub (l1 + l2)     -- This * differs from the one in the Prelude
@@ -670,7 +684,7 @@ This means, for example, that a compiler may optimize calls to
 functions in the Prelude without consulting the source code
 of the Prelude.
 
-\subsubsection{The @Prelude@ Module}
+\subsubsection{The \texorpdfstring{@Prelude@}{Prelude} Module}
 \indexmodule{Prelude}
 \index{Prelude!implicit import of}
 
@@ -693,7 +707,7 @@ implementation only gives a scheme.
 
 Chapter~\ref{stdprelude} defines the module @Prelude@ using
 several other modules: @PreludeList@, @PreludeIO@, and so on.
-These modules are {\em not} part of Haskell 98, and they cannot be imported
+These modules are {\em not} part of Haskell, and they cannot be imported
 separately.  They are simply 
 there to help explain the structure of the @Prelude@ module; they
 should be considered part of its implementation, not part of the language