Fix reference to "Haskell 98"
[haskell-report.git] / report / modules.verb
index cde75e3..46cd095 100644 (file)
@@ -1,5 +1,5 @@
 %
-% $Header: /home/cvs/root/haskell-report/report/modules.verb,v 1.19 2002/12/10 11:51:11 simonpj Exp $
+% $Header: /home/cvs/root/haskell-report/report/modules.verb,v 1.20 2003/01/13 13:08:56 simonpj Exp $
 %
 %**<title>The Haskell 98 Report: Modules</title>
 %*section 5
@@ -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}%
 
@@ -148,7 +162,7 @@ A value, field name, or class method, whether declared in
 the module body or imported,
 may be named by giving the name of the value as a "qvarid", which must be in scope.
 Operators should be enclosed in parentheses to turn them into
-"qvarid"'s.  
+"qvarid"s.  
 
 \item
 An algebraic datatype "T"
@@ -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
@@ -482,9 +496,9 @@ declarations can have an empty export list.  For example
 @
   module MyInstances() where
     instance Show (a -> b) where
-       show fn = "<<function>>"
+      show fn = "<<function>>"
     instance Show (IO a) where
-       show io = "<<IO action>>"
+      show io = "<<IO action>>"
 @
 \eprog
 
@@ -517,11 +531,10 @@ illegal to write
 \eprog
 \item {\em By an @import@ declaration.}  An @import@ declaration, whether @qualified@ or not,
 always brings into scope the qualified name of the imported entity (Section~\ref{import}).
-\end{itemize}
-Qualifiers may also be applied to
-names imported by an unqualified import; this allows a qualified
+This allows a qualified
 import to be replaced with an unqualified one without forcing changes
 in the references to the imported names.  
+\end{itemize}
 
 
 \subsubsection{Name clashes}
@@ -655,10 +668,10 @@ functions, called the ``Standard Prelude.''  In
 \Haskell{}, the Prelude is contained in the
 module @Prelude@.\indexmodule{Prelude} There are also
 many predefined library modules, which provide less frequently used
-functions and types.  For example, arrays, 
-tables, and most of the input/output are all part of the standard
+functions and types.  For example, complex numbers, arrays, 
+and most of the input/output are all part of the standard
 libraries.    These are 
-defined in Part~\ref{libraries}
+defined in Part~\ref{libraries}.
 Separating
 libraries from the Prelude has the advantage of reducing the size and
 complexity of the Prelude, allowing it to be more easily assimilated,
@@ -671,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}
 
@@ -694,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