[project @ 1997-06-05 23:38:01 by sof]
authorsof <unknown>
Thu, 5 Jun 1997 23:39:20 +0000 (23:39 +0000)
committersof <unknown>
Thu, 5 Jun 1997 23:39:20 +0000 (23:39 +0000)
2.04 update

ghc/docs/users_guide/how_to_run.lit
ghc/docs/users_guide/libraries.lit
ghc/docs/users_guide/release.lit
ghc/docs/users_guide/syslib.lit

index 67b949e..4422ee9 100644 (file)
@@ -437,13 +437,21 @@ f :: String -> Int
 f []     = 0
 f (_:xs) = 1
 f "2"    = 2
+
+g [] = 2
 \end{verbatim}
 
-where the last pattern match won't ever be reached, as the second
-pattern overlaps it. More often than not, `completeness' of
-patterns is a programmer mistake/error, but if you don't want
-the compiler to ``baby-sit'', use \tr{-fno-warn-incomplete-patterns} option
-to turn them off.\index{-fno-warn-incomplete-patterns option}.
+where the last pattern match in \tr{f} won't ever be reached, as the
+second pattern overlaps it. More often than not, redundant patterns
+is a programmer mistake/error, but if you don't want the compiler to
+``baby-sit'', use the \tr{-fno-warn-overlapping-patterns} option to
+turn these warnings off.\index{-fno-warn-overlapping-patterns option}
+
+Similarly for incomplete patterns, the function \tr{g} will fail when
+applied to non-empty lists, so the compiler will by default emit a
+warning about this. The option \tr{-fno-warn-incomplete-patterns}
+turns rhis off.\index{-fno-warn-incomplete-pattern option}
+
 
 If you're feeling really paranoid, the \tr{-dcore-lint}
 option\index{-dcore-lint option} is a good choice.  It turns on
@@ -605,6 +613,13 @@ doing some kind of weird experiment), you can tell GHC to ignore them
 with the \tr{-fignore-interface-pragmas}\index{-fignore-interface-pragmas option}
 option.
 
+When compiling without optimisations on, the compiler is extra-careful
+about not slurping in data constructors and instance declarations that
+it will not need. If you believe it is getting it wrong and not
+importing stuff which you think it should, this optimisation can be
+turned off with \tr{-fno-prune-tydecls} and \tr{-fno-prune-instdecls}.
+\index{-fno-prune-tydecls option}\index{-fno-prune-instdecls}
+
 See also \sectionref{options-linker}, which describes how the linker
 finds standard Haskell libraries.
 
@@ -1088,6 +1103,23 @@ individual type variables) is displayed.
 \item[\tr{-ddump-raw-asm}:]
 \index{-ddump-raw-asm option}
 Dump out the assembly-language stuff, before the ``mangler'' gets it.
+
+\item[\tr{-ddump-rn-trace}:]
+\index{-ddump-rn-trace}
+Make the renamer be *real* chatty about what it is upto.
+
+\item[\tr{-dshow-rn-stats}:]
+\index{-dshow-rn-stats}
+Print out summary of what kind of information the renamer had to bring
+in.
+\item[\tr{-dshow-unused-imports}:]
+\index{-dshow-unused-imports}
+Have the renamer report what imports does not contribute.
+
+\item[\tr{-fwarn-unused-names}:]
+\index{-fwarn-unused-names}
+Have the renamer report which locally defined names are not used/exported.
+
 %
 %\item[\tr{-dgc-debug}:]
 %\index{-dgc-debug option}
@@ -1202,11 +1234,11 @@ trademark of Peyton Jones Enterprises, plc.)
 Sometimes it is useful to make the connection between a source file
 and the command-line options it requires, quite tight. For instance,
 if a (Glasgow) Haskell source file uses \tr{casm}s, the C back-end
-often needs to be told about header files to use. Rather than
+often needs to be told about which header files to include. Rather than
 maintaining the list of files the source depends on in a
-\tr{Makefile} (using \tr{-#include} option), it is possible to do this
-directly in the source file using the \tr{OPTIONS} pragma
-\index{OPTIONS pragma}: 
+\tr{Makefile} (using the \tr{-#include} command-line option), it is
+possible to do this directly in the source file using the \tr{OPTIONS}
+pragma \index{OPTIONS pragma}: 
 
 \begin{verbatim}
 {-# OPTIONS -#include "foo.h" #-}
index 5231e87..e0ad183 100644 (file)
@@ -144,7 +144,7 @@ exports the type @ST@ including its representation, whereas the module
 None of these modules are involved in any mutual recursion, with the
 sole exception that many modules import @IOBase.error@.
 
-\subsection{The module @GHC@: really primitive stuff}
+\subsection[ghc-libs-ghc]{The module @GHC@: really primitive stuff}
 \label{sect:ghc}
 
 This section defines all the types which are primitive in Glasgow
index f55c3c4..74132c3 100644 (file)
@@ -26,6 +26,9 @@ Email: glasgow-haskell-\{users,bugs\}-request\@dcs.gla.ac.uk}
 % pointers to it.  Mentioning something in the release notes is not
 % the same as documenting it.
 
+\section[release-2-03]{Release notes for version~2.04---6/97}
+\input{2-04-notes.lit}
+
 \section[release-2-03]{Release notes for version~2.03---4/97}
 \input{2-03-notes.lit}
 
index 126d409..e14e714 100644 (file)
@@ -931,11 +931,13 @@ data BaudRate = B0 | B50 | B75 | B110 | B134 | B150 | B200 | B300 | B600
               | B1200 | B1800 | B2400 | B4800 | B9600 | B19200 | B38400
               deriving (Eq, Show)
 
-type Channel = Int
+data Fd 
 
-data ChannelOption = AppendOnWrite
-                   | CloseOnExec
-                   | NonBlockingRead
+intToFd :: Int -> Fd -- use with care.
+
+data FdOption = AppendOnWrite
+              | CloseOnExec
+              | NonBlockingRead
 
 data ControlCharacter = EndOfFile
                       | EndOfLine
@@ -1085,8 +1087,8 @@ otherwise, the command is executed with the current environment.  If
 \tr{wd} is \tr{Just dir}, the command is executed with working
 directory \tr{dir}; otherwise, the command is executed in the current
 working directory.  If \tr{{in,out,err}hdl} is \tr{Just handle}, the
-command is executed with the \tr{Channel} for \tr{std{in,out,err}}
-attached to the specified \tr{handle}; otherwise, the \tr{Channel} for
+command is executed with the \tr{Fd} for \tr{std{in,out,err}}
+attached to the specified \tr{handle}; otherwise, the \tr{Fd} for
 \tr{std{in,out,err}} is left unchanged.
 
 \begin{verbatim}
@@ -1504,11 +1506,11 @@ Various other causes.
 \end{itemize}
 
 \begin{verbatim}
-getTerminalName :: Channel -> IO FilePath
+getTerminalName :: Fd -> IO FilePath
 \end{verbatim}
 
 \tr{getTerminalName fd} calls \tr{ttyname} to obtain a name associated
-with the terminal for \tr{Channel} \tr{fd}. If \tr{fd} is associated
+with the terminal for \tr{Fd} \tr{fd}. If \tr{fd} is associated
 with a terminal, \tr{getTerminalName} returns the name of the
 terminal.
 
@@ -1524,11 +1526,11 @@ Various other causes.
 \end{itemize}
 
 \begin{verbatim}
-queryTerminal :: Channel -> IO Bool
+queryTerminal :: Fd -> IO Bool
 \end{verbatim}
 
 \tr{queryTerminal fd} calls \tr{isatty} to determine whether or
-not \tr{Channel} \tr{fd} is associated with a terminal.
+not \tr{Fd} \tr{fd} is associated with a terminal.
 
 \begin{verbatim}
 getSysVar :: SysVar -> IO Limit
@@ -1627,28 +1629,33 @@ accessModes        :: FileMode       -- rwxrwxrwx
 unionFileModes     :: FileMode -> FileMode -> FileMode
 intersectFileModes :: FileMode -> FileMode -> FileMode
 
-stdInput  :: Channel
-stdInput  = 0
+stdInput  :: Fd
+stdInput  = intToFd 0
+
+stdOutput :: Fd
+stdOutput = intToFd 1
 
-stdOutput :: Channel
-stdOutput = 1
+stdError  :: Fd
+stdError  = intToFd 2
 
-stdError  :: Channel
-stdError  = 2
+data OpenFileFlags =
+ OpenFileFlags {
+    append    :: Bool,
+    exclusive :: Bool,
+    noctty    :: Bool,
+    nonBlock  :: Bool,
+    trunc     :: Bool
+ }
 
-openChannel :: FilePath
-            -> OpenMode
-            -> Maybe FileMode  -- Just x => O_CREAT, Nothing => must exist
-            -> Bool            -- O_APPEND
-            -> Bool            -- O_EXCL
-            -> Bool            -- O_NOCTTY
-            -> Bool            -- O_NONBLOCK
-            -> Bool            -- O_TRUNC
-            -> IO Channel
+openFd :: FilePath
+       -> OpenMode
+       -> Maybe FileMode  -- Just x => O_CREAT, Nothing => must exist
+       -> OpenFileFlags
+       -> IO Fd
 \end{verbatim}
 
-\tr{openChannel path acc mode app excl noctty nonblock trunc} calls
-\tr{open} to obtain a \tr{Channel} for the file \tr{path} with access
+\tr{openFd path acc mode (OpenFileFlags app excl noctty nonblock trunc)} calls
+\tr{open} to obtain a \tr{Fd} for the file \tr{path} with access
 mode \tr{acc}.  If \tr{mode} is \tr{Just m}, the \tr{O_CREAT} flag is
 set and the file's permissions will be based on \tr{m} if it does not
 already exist; otherwise, the \tr{O_CREAT} flag is not set.  The
@@ -1658,10 +1665,10 @@ arguments \tr{app}, \tr{excl}, \tr{noctty}, \tr{nonblock}, and
 respectively.
 
 \begin{verbatim}
-createFile :: FilePath -> FileMode -> IO Channel
+createFile :: FilePath -> FileMode -> IO Fd
 \end{verbatim}
 
-\tr{createFile path mode} calls \tr{creat} to obtain a \tr{Channel}
+\tr{createFile path mode} calls \tr{creat} to obtain a \tr{Fd}
 for file \tr{path}, which will be created with permissions based on
 \tr{mode} if it does not already exist.
 
@@ -1745,12 +1752,12 @@ getFileStatus     :: FilePath -> IO FileStatus
 \tr{FileStatus} information for the file \tr{path}.
 
 \begin{verbatim}
-getChannelStatus :: Channel -> IO FileStatus
+getFdStatus :: Fd -> IO FileStatus
 \end{verbatim}
 
-\tr{getChannelStatus fd} calls \tr{fstat} to get the
+\tr{getFdStatus fd} calls \tr{fstat} to get the
 \tr{FileStatus} information for the file associated with
-\tr{Channel} \tr{fd}.
+\tr{Fd} \tr{fd}.
 
 \begin{verbatim}
 queryAccess :: FilePath -> Bool -> Bool -> Bool -> IO Bool
@@ -1819,14 +1826,14 @@ Various other causes.
 
 
 \begin{verbatim}
-getChannelVar :: PathVar -> Channel -> IO Limit
+getFdVar :: PathVar -> Fd -> IO Limit
 \end{verbatim}
 
-\tr{getChannelVar var fd} calls \tr{fpathconf} to obtain the
+\tr{getFdVar var fd} calls \tr{fpathconf} to obtain the
 dynamic value of the requested configurable file limit or option associated
 with the file or directory attached to the open channel \tr{fd}.
-For defined file limits, \tr{getChannelVar} returns the associated
-value.  For defined file options, the result of \tr{getChannelVar}
+For defined file limits, \tr{getFdVar} returns the associated
+value.  For defined file options, the result of \tr{getFdVar}
 is undefined, but not failure.
 
 The operation may fail with:
@@ -1842,38 +1849,38 @@ Various other causes.
 \index{Posix, input/output}
 
 \begin{verbatim}
-createPipe :: IO (Channel, Channel)
+createPipe :: IO (Fd, Fd)
 \end{verbatim}
 
 \tr{createPipe} calls \tr{pipe} to create a pipe and returns a pair of
-\tr{Channels}, the first for writing and the second for reading.
+\tr{Fd}s, the first for writing and the second for reading.
 
 \begin{verbatim}
-dupChannel :: Channel -> IO Channel
+dup :: Fd -> IO Fd
 \end{verbatim}
 
-\tr{dupChannel fd} calls \tr{dup} to duplicate \tr{Channel} \tr{fd} to
-another \tr{Channel}.
+\tr{dup fd} calls \tr{dup} to duplicate \tr{Fd} \tr{fd} to
+another \tr{Fd}.
 
 \begin{verbatim}
-dupChannelTo :: Channel -> Channel -> IO ()
+dupTo :: Fd -> Fd -> IO ()
 \end{verbatim}
 
-\tr{dupChannelTo src dst} calls \tr{dup2} to duplicate \tr{Channel}
-\tr{src} to \tr{Channel} \tr{dst}.
+\tr{dupTo src dst} calls \tr{dup2} to duplicate \tr{Fd}
+\tr{src} to \tr{Fd} \tr{dst}.
 
 \begin{verbatim}
-closeChannel :: Channel -> IO ()
+fdClose :: Fd -> IO ()
 \end{verbatim}
 
-\tr{closeChannel fd} calls \tr{close} to close \tr{Channel} \tr{fd}.
+\tr{fdClose fd} calls \tr{close} to close \tr{Fd} \tr{fd}.
 
 \begin{verbatim}
-readChannel :: Channel -> ByteCount -> IO (String, ByteCount)
+fdRead :: Fd -> ByteCount -> IO (String, ByteCount)
 \end{verbatim}
 
-\tr{readChannel fd nbytes} calls \tr{read} to read at most \tr{nbytes}
-bytes from \tr{Channel} \tr{fd}, and returns the result as a string
+\tr{fdRead fd nbytes} calls \tr{read} to read at most \tr{nbytes}
+bytes from \tr{Fd} \tr{fd}, and returns the result as a string
 paired with the number of bytes actually read.
 
 The operation may fail with:
@@ -1886,36 +1893,36 @@ Various other causes.
 \end{itemize}
 
 \begin{verbatim}
-writeChannel :: Channel -> String -> IO ByteCount
+fdWrite :: Fd -> String -> IO ByteCount
 \end{verbatim}
 
-\tr{writeChannel fd s} calls \tr{write} to write
-the string \tr{s} to \tr{Channel} \tr{fd} as a
+\tr{fdWrite fd s} calls \tr{write} to write
+the string \tr{s} to \tr{Fd} \tr{fd} as a
 contiguous sequence of bytes.  It returns the number of bytes successfully
 written.
 
 \begin{verbatim}
-queryChannelOption :: ChannelOption -> Channel -> IO Bool
+queryFdOption :: FdOption -> Fd -> IO Bool
 \end{verbatim}
 
-\tr{getChannelOption opt fd} calls \tr{fcntl} to determine whether or
-not the flag associated with \tr{ChannelOption} \tr{opt} is set for
-\tr{Channel} \tr{fd}.
+\tr{getFdOption opt fd} calls \tr{fcntl} to determine whether or
+not the flag associated with \tr{FdOption} \tr{opt} is set for
+\tr{Fd} \tr{fd}.
 
 \begin{verbatim}
-setChannelOption :: ChannelOption -> Bool -> Channel -> IO ()
+setFdOption :: Fd -> FdOption -> Bool -> IO ()
 \end{verbatim}
 
-\tr{setChannelOption opt val fd} calls \tr{fcntl} to set the flag
-associated with \tr{ChannelOption} \tr{opt} on \tr{Channel} \tr{fd} to
+\tr{setFdOption fd opt val} calls \tr{fcntl} to set the flag
+associated with \tr{FdOption} \tr{opt} on \tr{Fd} \tr{fd} to
 \tr{val}.
 
 \begin{verbatim}
-getLock :: Channel -> FileLock -> IO (Maybe (ProcessID, FileLock))
+getLock :: Fd -> FileLock -> IO (Maybe (ProcessID, FileLock))
 \end{verbatim}
 
 \tr{getLock fd lock} calls \tr{fcntl} to get the first \tr{FileLock}
-for \tr{Channel} \tr{fd} which blocks the \tr{FileLock} \tr{lock}.  If
+for \tr{Fd} \tr{fd} which blocks the \tr{FileLock} \tr{lock}.  If
 no such \tr{FileLock} exists, \tr{getLock} returns \tr{Nothing}.
 Otherwise, it returns \tr{Just (pid, block)}, where \tr{block} is the
 blocking \tr{FileLock} and \tr{pid} is the \tr{ProcessID} of the
@@ -1923,31 +1930,31 @@ process holding the blocking \tr{FileLock}.
 
 
 \begin{verbatim}
-setLock :: Channel -> FileLock -> IO ()
+setLock :: Fd -> FileLock -> IO ()
 \end{verbatim}
 
 \tr{setLock fd lock} calls \tr{fcntl} with \tr{F_SETLK} to set or
-clear a lock segment for \tr{Channel} \tr{fd} as indicated by the
+clear a lock segment for \tr{Fd} \tr{fd} as indicated by the
 \tr{FileLock} \tr{lock}.  \tr{setLock} does not block, but fails with
 \tr{SystemError} if the request cannot be satisfied immediately.
 
 \begin{verbatim}
-waitToSetLock :: Channel -> FileLock -> IO ()
+waitToSetLock :: Fd -> FileLock -> IO ()
 \end{verbatim}
 
 \tr{waitToSetLock fd lock} calls \tr{fcntl} with \tr{F_SETLKW} to set
-or clear a lock segment for \tr{Channel} \tr{fd} as indicated by the
+or clear a lock segment for \tr{Fd} \tr{fd} as indicated by the
 \tr{FileLock} \tr{lock}. If the request cannot be satisfied
 immediately, \tr{waitToSetLock} blocks until the request can be
 satisfied.
 
 
 \begin{verbatim}
-seekChannel :: Channel -> SeekMode -> FileOffset -> IO FileOffset
+fdSeek :: Fd -> SeekMode -> FileOffset -> IO FileOffset
 \end{verbatim}
 
-\tr{seekChannel fd whence offset} calls \tr{lseek} to position the
-\tr{Channel} at the given \tr{offset} from the starting location
+\tr{fdSeek fd whence offset} calls \tr{lseek} to position the
+\tr{Fd} \tr{fd} at the given \tr{offset} from the starting location
 indicated by \tr{whence}.  It returns the resulting offset from the
 start of the file in bytes.
 
@@ -1982,71 +1989,69 @@ withInputSpeed  :: TerminalAttributes -> BaudRate -> TerminalAttributes
 outputSpeed     :: TerminalAttributes -> BaudRate
 withOutputSpeed :: TerminalAttributes -> BaudRate -> TerminalAttributes
 
-getTerminalAttributes :: Channel -> IO TerminalAttributes
+getTerminalAttributes :: Fd -> IO TerminalAttributes
 \end{verbatim}
 
 \tr{getTerminalAttributes fd} calls \tr{tcgetattr} to obtain
-the \tr{TerminalAttributes} associated with \tr{Channel}
-\tr{fd}.
+the \tr{TerminalAttributes} associated with \tr{Fd} \tr{fd}.
 
 \begin{verbatim}
-setTerminalAttributes :: Channel 
+setTerminalAttributes :: Fd
                       -> TerminalAttributes 
                       -> TerminalState
                       -> IO ()
 \end{verbatim}
 
 \tr{setTerminalAttributes fd attr ts} calls \tr{tcsetattr} to change
-the \tr{TerminalAttributes} associated with \tr{Channel} \tr{fd} to
+the \tr{TerminalAttributes} associated with \tr{Fd} \tr{fd} to
 \tr{attr}, when the terminal is in the state indicated by \tr{ts}.
 
 \begin{verbatim}
-sendBreak :: Channel -> Int -> IO ()
+sendBreak :: Fd -> Int -> IO ()
 \end{verbatim}
 
 \tr{sendBreak fd duration} calls \tr{tcsendbreak} to transmit a
-continuous stream of zero-valued bits on \tr{Channel} \tr{fd} for the
+continuous stream of zero-valued bits on \tr{Fd} \tr{fd} for the
 specified implementation-dependent \tr{duration}.
 
 \begin{verbatim}
-drainOutput :: Channel -> IO ()
+drainOutput :: Fd -> IO ()
 \end{verbatim}
 
 \tr{drainOutput fd} calls \tr{tcdrain} to block until all output
-written to \tr{Channel} \tr{fd} has been transmitted.
+written to \tr{Fd} \tr{fd} has been transmitted.
 
 \begin{verbatim}
-discardData :: Channel -> QueueSelector -> IO ()
+discardData :: Fd -> QueueSelector -> IO ()
 \end{verbatim}
 
 \tr{discardData fd queues} calls \tr{tcflush} to discard
-pending input and/or output for \tr{Channel} \tr{fd},
+pending input and/or output for \tr{Fd} \tr{fd},
 as indicated by the \tr{QueueSelector} \tr{queues}.
 
 \begin{verbatim}
-controlFlow :: Channel -> FlowAction -> IO ()
+controlFlow :: Fd -> FlowAction -> IO ()
 \end{verbatim}
 
 \tr{controlFlow fd action} calls \tr{tcflow} to control the 
-flow of data on \tr{Channel} \tr{fd}, as indicated by
+flow of data on \tr{Fd} \tr{fd}, as indicated by
 \tr{action}.
 
 \begin{verbatim}
-getTerminalProcessGroupID :: Channel -> IO ProcessGroupID
+getTerminalProcessGroupID :: Fd -> IO ProcessGroupID
 \end{verbatim}
 
 \tr{getTerminalProcessGroupID fd} calls \tr{tcgetpgrp} to
 obtain the \tr{ProcessGroupID} of the foreground process group 
-associated with the terminal attached to \tr{Channel} 
-\tr{fd}.
+associated with the terminal attached to \tr{Fd} \tr{fd}.
 
 \begin{verbatim}
-setTerminalProcessGroupID :: Channel -> ProcessGroupID -> IO ()
+setTerminalProcessGroupID :: Fd -> ProcessGroupID -> IO ()
 \end{verbatim}
 
 \tr{setTerminalProcessGroupID fd pgid} calls \tr{tcsetpgrp} to
 set the \tr{ProcessGroupID} of the foreground process group 
-associated with the terminal attached to \tr{Channel} 
+associated with the terminal attached to \tr{Fd} 
 \tr{fd} to \tr{pgid}.
 
 \subsubsection[System Database]{Posix System Databases}
@@ -2143,7 +2148,7 @@ noError :: ErrorCode
 noError = 0
 
 argumentListTooLong, e2BIG              :: ErrorCode
-badChannel, eBADF                       :: ErrorCode
+badFd, eBADF                            :: ErrorCode
 brokenPipe, ePIPE                       :: ErrorCode
 directoryNotEmpty, eNOTEMPTY            :: ErrorCode
 execFormatError, eNOEXEC                :: ErrorCode