ghci.xml whitespace only
[ghc-hetmet.git] / docs / users_guide / ghci.xml
index 299b1e5..d33ac8e 100644 (file)
@@ -4,7 +4,7 @@
   <indexterm><primary>GHCi</primary></indexterm>
   <indexterm><primary>interpreter</primary><see>GHCi</see></indexterm>
   <indexterm><primary>interactive</primary><see>GHCi</see></indexterm>
-  
+
   <para>GHCi<footnote>
       <para>The &lsquo;i&rsquo; stands for &ldquo;Interactive&rdquo;</para>
     </footnote>
 
 <screen>
 $ ghci
-GHCi, version 6.8.1: http://www.haskell.org/ghc/  :? for help
+GHCi, version 6.12.1: http://www.haskell.org/ghc/  :? for help
+Loading package ghc-prim ... linking ... done.
+Loading package integer-gmp ... linking ... done.
 Loading package base ... linking ... done.
-Prelude> 
+Loading package ffi-1.0 ... linking ... done.
+Prelude>
 </screen>
 
     <para>There may be a short pause while GHCi loads the prelude and
@@ -51,12 +54,56 @@ Prelude> 1+2
 3
 Prelude> let x = 42 in x / 9
 4.666666666666667
-Prelude> 
+Prelude>
 </screen>
 
     <para>GHCi interprets the whole line as an expression to evaluate.
-    The expression may not span several lines - as soon as you press
-    enter, GHCi will attempt to evaluate it.</para>
+    The expression may not span several lines - as soon as you press enter,
+    GHCi will attempt to evaluate it.</para>
+
+    <para>GHCi also has a multiline mode,
+    <indexterm><primary><literal>:set +m</literal></primary></indexterm>,
+    which is terminated by an empty line:</para>
+
+<screen>
+Prelude> :set +m
+Prelude> let x = 42 in x / 9
+Prelude|
+4.666666666666667
+Prelude>
+</screen>
+
+    <para>In Haskell, a <literal>let</literal> expression is followed
+    by <literal>in</literal>.  However, in GHCi, since the expression
+    can also be interpreted in the <literal>IO</literal> monad,
+    a <literal>let</literal> binding with no accompanying
+    <literal>in</literal> statement can be signalled by an empty line,
+    as in the above example.</para>
+
+    <para>Multiline mode is useful when entering monadic
+    <literal>do</literal> statements:</para>
+
+<screen>
+Control.Monad.State> flip evalStateT 0 $ do
+Control.Monad.State| i &lt;- get
+Control.Monad.State| lift $ do
+Control.Monad.State|   putStrLn "Hello World!"
+Control.Monad.State|   print i
+Control.Monad.State|
+"Hello World!"
+0
+Control.Monad.State>
+</screen>
+
+   <para>During a multiline interaction, the user can interrupt and
+   return to the top-level prompt.</para>
+
+<screen>
+Prelude> do
+Prelude| putStrLn "Hello, World!"
+Prelude| ^C
+Prelude>
+</screen>
   </sect1>
 
   <sect1 id="loading-source-files">
@@ -127,7 +174,7 @@ Ok, modules loaded: Main.
       <title>Modules vs. filenames</title>
       <indexterm><primary>modules</primary><secondary>and filenames</secondary></indexterm>
       <indexterm><primary>filenames</primary><secondary>of modules</secondary></indexterm>
-      
+
       <para>Question: How does GHC find the filename which contains
       module <replaceable>M</replaceable>?  Answer: it looks for the
       file <literal><replaceable>M</replaceable>.hs</literal>, or
@@ -232,7 +279,7 @@ Ok, modules loaded: A, B, C, D.
     because the source and everything it depends on
     is unchanged since the last compilation.</para>
 
-    <para>At any time you can use the command 
+    <para>At any time you can use the command
     <literal>:show modules</literal>
     to get a list of the modules currently loaded
     into GHCi:</para>
@@ -255,7 +302,7 @@ A                ( A.hs, interpreted )
 *Main> :reload
 Compiling D                ( D.hs, interpreted )
 Ok, modules loaded: A, B, C, D.
-*Main> 
+*Main>
 </screen>
 
     <para>Note that module D was compiled, but in this instance
@@ -302,12 +349,29 @@ Ok, modules loaded: A, B, C, D.
     confusion, because non-exported top-level definitions of a module
     are only available for use in expressions at the prompt when the
     module is interpreted (see <xref linkend="ghci-scope" />).  For
-    this reason, if you ask GHCi to load a filename rather than a
-    module name (e.g. <literal>:load Main.hs</literal> rather than
-    <literal>:load Main</literal>) then any existing object file will
-    be ignored and the module will be interpreted rather than
-    compiled.  Using <literal>-fobject-code</literal> disables this
-    behaviour (see <xref linkend="ghci-obj" />).</para>
+    this reason, you might sometimes want to force GHCi to load a
+    module using the interpreter.  This can be done by prefixing
+      a <literal>*</literal> to the module name or filename when
+      using <literal>:load</literal>, for example</para>
+
+<screen>
+Prelude> :load *A
+Compiling A                ( A.hs, interpreted )
+*A>
+</screen>
+
+<para>When the <literal>*</literal> is used, GHCi ignores any
+  pre-compiled object code and interprets the module.  If you have
+  already loaded a number of modules as object code and decide that
+  you wanted to interpret one of them, instead of re-loading the whole
+  set you can use <literal>:add *M</literal> to specify that you want
+  <literal>M</literal> to be interpreted (note that this might cause
+  other modules to be interpreted too, because compiled modules cannot
+  depend on interpreted ones).</para>
+
+<para>To always compile everything to object code and never use the
+  interpreter, use the <literal>-fobject-code</literal> option (see
+  <xref linkend="ghci-obj" />).</para>
 
     <para>HINT: since GHCi will only use a compiled object file if it
     can be sure that the compiled version is up-to-date, a good technique
@@ -365,7 +429,7 @@ hello
       <title>Using <literal>do-</literal>notation at the prompt</title>
       <indexterm><primary>do-notation</primary><secondary>in GHCi</secondary></indexterm>
       <indexterm><primary>statements</primary><secondary>in GHCi</secondary></indexterm>
-      
+
       <para>GHCi actually accepts <firstterm>statements</firstterm>
       rather than just expressions at the prompt.  This means you can
       bind values and functions to names, and use them in future
@@ -390,10 +454,10 @@ Prelude>
       it as we did above.</para>
 
       <para>If <option>-fprint-bind-result</option> is set then
-      GHCi will print the result of a statement if and only if: 
+      GHCi will print the result of a statement if and only if:
        <itemizedlist>
          <listitem>
-           <para>The statement is not a binding, or it is a monadic binding 
+           <para>The statement is not a binding, or it is a monadic binding
              (<literal>p &lt;- e</literal>) that binds exactly one
              variable.</para>
          </listitem>
@@ -437,9 +501,9 @@ Prelude> add 1 2
 3
 Prelude>
 </screen>
-        <para>However, this quickly gets tedious when defining functions 
+        <para>However, this quickly gets tedious when defining functions
         with multiple clauses, or groups of mutually recursive functions,
-        because the complete definition has to be given on a single line, 
+        because the complete definition has to be given on a single line,
         using explicit braces and semicolons instead of layout:</para>
 <screen>
 Prelude> let { f op n [] = n ; f op n (h:t) = h `op` f op n t }
@@ -461,9 +525,9 @@ Prelude> g (*) 1 [1..3]
 </screen>
       <para>Such multiline commands can be used with any GHCi command,
       and the lines between <literal>:{</literal> and
-      <literal>:}</literal> are simply merged into a single line for 
+      <literal>:}</literal> are simply merged into a single line for
       interpretation. That implies that each such group must form a single
-      valid command when merged, and that no layout rule is used. 
+      valid command when merged, and that no layout rule is used.
       The main purpose of multiline commands is not to replace module
       loading but to make definitions in .ghci-files (see <xref
       linkend="ghci-dot-files"/>) more readable and maintainable.</para>
@@ -507,7 +571,7 @@ xs :: [Integer]
     </sect2>
 
     <sect2 id="ghci-scope">
-      <title>What's really in scope at the prompt?</title> 
+      <title>What's really in scope at the prompt?</title>
 
       <para>When you type an expression at the prompt, what
       identifiers and types are in scope?  GHCi provides a flexible
@@ -552,9 +616,9 @@ Compiling Main             ( Main.hs, interpreted )
       <para>NOTE: for technical reasons, GHCi can only support the
       <literal>*</literal>-form for modules that are interpreted.
       Compiled modules and package modules can only contribute their
-      exports to the current scope.  This is why GHCi will always
-      interpret, not compile, a module if you specify its filename
-      rather than its module name to <literal>:load</literal>.</para>
+      exports to the current scope.  To ensure that GHCi loads the
+      interpreted version of a module, add the <literal>*</literal>
+      when loading the module, e.g. <literal>:load *M</literal>.</para>
 
       <para>The scope is manipulated using the
       <literal>:module</literal> command.  For example, if the current
@@ -569,10 +633,12 @@ hello
 Prelude IO>
 </screen>
 
-      <para>(Note: you can use <literal>import M</literal> as an
-      alternative to <literal>:module +M</literal>, and
-      <literal>:module</literal> can also be shortened to 
-      <literal>:m</literal>). The full syntax of the
+      <para>(Note: you can use conventional
+      haskell <literal>import</literal> syntax as
+      well, but this does not support
+      <literal>*</literal> forms).
+      <literal>:module</literal> can also be shortened to
+      <literal>:m</literal>. The full syntax of the
       <literal>:module</literal> command is:</para>
 
 <screen>
@@ -650,13 +716,14 @@ Prelude IO>
             loaded</literal>&rdquo;.</para>
       </sect3>
 
-      <sect3>
+      <sect3 id="ghci-import-qualified">
        <title>Qualified names</title>
 
        <para>To make life slightly easier, the GHCi prompt also
         behaves as if there is an implicit <literal>import
         qualified</literal> declaration for every module in every
-        package, and every module currently loaded into GHCi.</para>
+        package, and every module currently loaded into GHCi.  This
+          behaviour can be disabled with the flag <option>-fno-implicit-import-qualified</option><indexterm><primary><option>-fno-implicit-import-qualified</option></primary></indexterm>.</para>
       </sect3>
 
       <sect3>
@@ -718,13 +785,13 @@ bar
 
       </sect3>
     </sect2>
-  
+
 
     <sect2>
       <title>The <literal>it</literal> variable</title>
       <indexterm><primary><literal>it</literal></primary>
       </indexterm>
-      
+
       <para>Whenever an expression (or a non-binding statement, to be
       precise) is typed at the prompt, GHCi implicitly binds its value
       to the variable <literal>it</literal>.  For example:</para>
@@ -737,7 +804,7 @@ Prelude> it * 2
     <para>What actually happens is that GHCi typechecks the
     expression, and if it doesn't have an <literal>IO</literal> type,
     then it transforms it as follows: an expression
-    <replaceable>e</replaceable> turns into 
+    <replaceable>e</replaceable> turns into
 <screen>
 let it = <replaceable>e</replaceable>;
 print it
@@ -796,19 +863,19 @@ it &lt;- <replaceable>e</replaceable>
   ghci> reverse []
 </programlisting>
       What should GHCi do?  Strictly speaking, the program is ambiguous.  <literal>show (reverse [])</literal>
-      (which is what GHCi computes here) has type <literal>Show a => a</literal> and how that displays depends 
+      (which is what GHCi computes here) has type <literal>Show a => String</literal> and how that displays depends
       on the type <literal>a</literal>.  For example:
 <programlisting>
-  ghci> (reverse []) :: String
+  ghci> reverse ([] :: String)
   ""
-  ghci> (reverse []) :: [Int]
+  ghci> reverse ([] :: [Int])
   []
 </programlisting>
     However, it is tiresome for the user to have to specify the type, so GHCi extends Haskell's type-defaulting
-    rules (Section 4.3.4 of the Haskell 98 Report (Revised)) as follows.  The
+    rules (Section 4.3.4 of the Haskell 2010 Report) as follows.  The
     standard rules take each group of constraints <literal>(C1 a, C2 a, ..., Cn
     a)</literal> for each type variable <literal>a</literal>, and defaults the
-    type variable if 
+    type variable if
     <orderedlist>
         <listitem>
             <para>
@@ -906,7 +973,7 @@ def = toEnum 0
         <listitem>
           <para>The ability to set a <firstterm>breakpoint</firstterm> on a
             function definition or expression in the program.  When the function
-            is called, or the expression evaluated, GHCi suspends 
+            is called, or the expression evaluated, GHCi suspends
             execution and returns to the prompt, where you can inspect the
             values of local variables before continuing with the
             execution.</para>
@@ -932,7 +999,7 @@ def = toEnum 0
         </listitem>
       </itemizedlist>
     </para>
-      
+
     <para>There is currently no support for obtaining a &ldquo;stack
     trace&rdquo;, but the tracing and history features provide a
     useful second-best, which will often be enough to establish the
@@ -940,14 +1007,14 @@ def = toEnum 0
     automatically when an exception is thrown, even if it is thrown
     from within compiled code (see <xref
     linkend="ghci-debugger-exceptions" />).</para>
-      
+
     <sect2 id="breakpoints">
       <title>Breakpoints and inspecting variables</title>
-      
+
       <para>Let's use quicksort as a running example.  Here's the code:</para>
 
 <programlisting>
-qsort [] = [] 
+qsort [] = []
 qsort (a:as) = qsort left ++ [a] ++ qsort right
   where (left,right) = (filter (&lt;=a) as, filter (&gt;a) as)
 
@@ -961,7 +1028,7 @@ Prelude> :l qsort.hs
 [1 of 1] Compiling Main             ( qsort.hs, interpreted )
 Ok, modules loaded: Main.
 *Main>
-      </screen>       
+      </screen>
 
       <para>Now, let's set a breakpoint on the right-hand-side of the second
         equation of qsort:</para>
@@ -971,12 +1038,12 @@ Ok, modules loaded: Main.
 Breakpoint 0 activated at qsort.hs:2:15-46
 *Main>
 </programlisting>
-      
+
       <para>The command <literal>:break 2</literal> sets a breakpoint on line
         2 of the most recently-loaded module, in this case
         <literal>qsort.hs</literal>.   Specifically, it picks the
         leftmost complete subexpression on that line on which to set the
-        breakpoint, which in this case is the expression 
+        breakpoint, which in this case is the expression
         <literal>(qsort left ++ [a] ++ qsort right)</literal>.</para>
 
       <para>Now, we run the program:</para>
@@ -997,8 +1064,8 @@ right :: [a]
         location, we can use the <literal>:list</literal> command:</para>
 
 <programlisting>
-[qsort.hs:2:15-46] *Main> :list 
-1  qsort [] = [] 
+[qsort.hs:2:15-46] *Main> :list
+1  qsort [] = []
 2  qsort (a:as) = qsort left ++ [a] ++ qsort right
 3    where (left,right) = (filter (&lt;=a) as, filter (&gt;a) as)
 </programlisting>
@@ -1071,7 +1138,7 @@ left = (_t1::[a])
       <para>The flag <literal>-fprint-evld-with-show</literal> instructs
       <literal>:print</literal> to reuse
       available <literal>Show</literal> instances when possible. This happens
-      only when the contents of the variable being inspected 
+      only when the contents of the variable being inspected
       are completely evaluated.</para>
 
 
@@ -1107,7 +1174,7 @@ _t1 :: [Integer]
 [qsort.hs:2:15-46] *Main> a
 8
 </screen>
-      
+
       <para>You might find it useful to use Haskell's
         <literal>seq</literal> function to evaluate individual thunks rather
         than evaluating the whole expression with <literal>:force</literal>.
@@ -1138,7 +1205,7 @@ _result :: [a]
 a :: a
 left :: [a]
 right :: [a]
-[qsort.hs:2:15-46] *Main> 
+[qsort.hs:2:15-46] *Main>
 </screen>
 
       <para>The execution continued at the point it previously stopped, and has
@@ -1168,13 +1235,13 @@ right :: [a]
    :break <replaceable>line</replaceable>
    :break <replaceable>line</replaceable> <replaceable>column</replaceable>
    :break <replaceable>module</replaceable> <replaceable>line</replaceable>
-   :break <replaceable>module</replaceable> <replaceable>line</replaceable> <replaceable>column</replaceable> 
+   :break <replaceable>module</replaceable> <replaceable>line</replaceable> <replaceable>column</replaceable>
 </screen>
 
       <para>When a breakpoint is set on a particular line, GHCi sets the
         breakpoint on the
         leftmost subexpression that begins and ends on that line.  If two
-        complete subexpressions start at the same 
+        complete subexpressions start at the same
         column, the longest one is picked.  If there is no complete
         subexpression on the line, then the leftmost expression starting on
         the line is picked, and failing that the rightmost expression that
@@ -1188,7 +1255,7 @@ right :: [a]
           and doesn't match others.  The best advice is to avoid tab
           characters in your source code altogether (see
           <option>-fwarn-tabs</option> in <xref linkend="options-sanity"
-            />).</para> 
+            />).</para>
 
       <para>If the module is omitted, then the most recently-loaded module is
         used.</para>
@@ -1222,7 +1289,7 @@ right :: [a]
 *Main> :delete 0
 *Main> :show breaks
 [1] Main qsort.hs:2:15-46
-</screen>        
+</screen>
 
         <para>To delete all breakpoints at once, use <literal>:delete *</literal>.</para>
 
@@ -1234,7 +1301,7 @@ right :: [a]
 
       <para>Single-stepping is a great way to visualise the execution of your
         program, and it is also a useful tool for identifying the source of a
-        bug. GHCi offers two variants of stepping. Use 
+        bug. GHCi offers two variants of stepping. Use
        <literal>:step</literal>  to enable all the
         breakpoints in the program, and execute until the next breakpoint is
         reached. Use <literal>:steplocal</literal> to limit the set
@@ -1253,7 +1320,7 @@ _result :: IO ()
         <replaceable>expr</replaceable></literal> begins the evaluation of
         <replaceable>expr</replaceable> in single-stepping mode.  If
         <replaceable>expr</replaceable> is omitted, then it single-steps from
-        the current breakpoint. <literal>:stepover</literal> 
+        the current breakpoint. <literal>:stepover</literal>
         works similarly.</para>
 
       <para>The <literal>:list</literal> command is particularly useful when
@@ -1261,9 +1328,9 @@ _result :: IO ()
 
 <screen>
 [qsort.hs:5:7-47] *Main> :list
-4  
+4
 5  main = print (qsort [8, 4, 0, 3, 1, 23, 11, 18])
-6  
+6
 [qsort.hs:5:7-47] *Main>
 </screen>
 
@@ -1276,9 +1343,9 @@ _result :: IO ()
 [qsort.hs:5:7-47] *Main> :step
 Stopped at qsort.hs:5:14-46
 _result :: [Integer]
-4  
+4
 5  main = print (qsort [8, 4, 0, 3, 1, 23, 11, 18])
-6  
+6
 [qsort.hs:5:14-46] *Main>
 </screen>
     </sect2>
@@ -1372,13 +1439,13 @@ _result :: [a]
 
 <screen>
 *Main&gt; :list qsort
-1  qsort [] = [] 
+1  qsort [] = []
 2  qsort (a:as) = qsort left ++ [a] ++ qsort right
 3    where (left,right) = (filter (&lt;=a) as, filter (&gt;a) as)
-4  
+4
 *Main&gt; :b 1
 Breakpoint 1 activated at qsort.hs:1:11-12
-*Main&gt; 
+*Main&gt;
 </screen>
 
       <para>and then run a small <literal>qsort</literal> with
@@ -1423,7 +1490,7 @@ Logged breakpoint at qsort.hs:3:24-38
 _result :: [a]
 as :: [a]
 a :: a
-[-1: qsort.hs:3:24-38] *Main> 
+[-1: qsort.hs:3:24-38] *Main>
 </screen>
 
       <para>Note that the local variables at each step in the history have been
@@ -1465,10 +1532,10 @@ a :: a
         we can't set a breakpoint on it directly.  For this reason, GHCi
         provides the flags <literal>-fbreak-on-exception</literal> which causes
         the evaluator to stop when an exception is thrown, and <literal>
-       -fbreak-on-error</literal>, which works similarly but stops only on 
-       uncaught exceptions. When stopping at an exception, GHCi will act 
+       -fbreak-on-error</literal>, which works similarly but stops only on
+       uncaught exceptions. When stopping at an exception, GHCi will act
        just as it does when a breakpoint is hit, with the deviation that it
-       will not show you any source code location. Due to this, these 
+       will not show you any source code location. Due to this, these
        commands are only really useful in conjunction with
         <literal>:trace</literal>, in order to log the steps leading up to the
         exception.  For example:</para>
@@ -1476,7 +1543,7 @@ a :: a
 <screen>
 *Main> :set -fbreak-on-exception
 *Main> :trace qsort ("abc" ++ undefined)
-"Stopped at &lt;exception thrown&gt;
+&ldquo;Stopped at &lt;exception thrown&gt;
 _exception :: e
 [&lt;exception thrown&gt;] *Main&gt; :hist
 -1  : qsort.hs:3:24-38
@@ -1508,15 +1575,15 @@ as = 'b' : 'c' : (_t1::[Char])
 
     <sect2><title>Example: inspecting functions</title>
       <para>
-        It is possible to use the debugger to examine function values. 
+        It is possible to use the debugger to examine function values.
         When we are at a breakpoint and a function is in scope, the debugger
-        cannot show 
-        you the source code for it; however, it is possible to get some 
-        information by applying it to some arguments and  observing the result. 
+        cannot show
+        you the source code for it; however, it is possible to get some
+        information by applying it to some arguments and  observing the result.
       </para>
 
       <para>
-        The process is slightly complicated when the binding is polymorphic. 
+        The process is slightly complicated when the binding is polymorphic.
         We show the process by means of an example.
         To keep things simple, we will use the well known <literal>map</literal> function:
 <programlisting>
@@ -1540,9 +1607,9 @@ x :: a
 f :: a -> b
 xs :: [a]
 </screen>
-      GHCi tells us that, among other bindings, <literal>f</literal> is in scope. 
-      However, its type is not fully known yet,  
-      and thus it is not possible to apply it to any 
+      GHCi tells us that, among other bindings, <literal>f</literal> is in scope.
+      However, its type is not fully known yet,
+      and thus it is not possible to apply it to any
       arguments. Nevertheless, observe that the type of its first argument is the
       same as the type of <literal>x</literal>, and its result type is shared
         with <literal>_result</literal>.
@@ -1550,12 +1617,12 @@ xs :: [a]
 
       <para>
         As we demonstrated earlier (<xref linkend="breakpoints" />),  the
-        debugger has some intelligence built-in to update the type of 
-        <literal>f</literal> whenever the types of <literal>x</literal> or 
+        debugger has some intelligence built-in to update the type of
+        <literal>f</literal> whenever the types of <literal>x</literal> or
         <literal>_result</literal> are discovered.  So what we do in this
         scenario is
-        force <literal>x</literal> a bit, in order to recover both its type 
-      and the argument part of <literal>f</literal>.  
+        force <literal>x</literal> a bit, in order to recover both its type
+      and the argument part of <literal>f</literal>.
 <screen>
 *Main> seq x ()
 *Main> :print x
@@ -1564,7 +1631,7 @@ x = 1
       </para>
       <para>
         We can check now that as expected, the type of <literal>x</literal>
-        has been reconstructed, and with it the 
+        has been reconstructed, and with it the
         type of <literal>f</literal> has been too:</para>
 <screen>
 *Main> :t x
@@ -1574,7 +1641,7 @@ f :: Integer -> b
 </screen>
       <para>
         From here, we can apply f to any argument of type Integer and observe
-        the results. 
+        the results.
 <screen><![CDATA[
 *Main> let b = f 10
 *Main> :t b
@@ -1600,10 +1667,10 @@ Just 20
 *Main> map f [1..5]
 [Just 1, Just 2, Just 3, Just 4, Just 5]
 ]]></screen>
-      In the first application of <literal>f</literal>, we had to do 
+      In the first application of <literal>f</literal>, we had to do
       some more type reconstruction
-      in order to recover the result type of <literal>f</literal>. 
-      But after that, we are free to use 
+      in order to recover the result type of <literal>f</literal>.
+      But after that, we are free to use
       <literal>f</literal> normally.
      </para>
     </sect2>
@@ -1624,7 +1691,7 @@ Just 20
             CAF at the prompt again.</para>
         </listitem>
        <listitem><para>
-         Implicit parameters (see <xref linkend="implicit-parameters"/>) are only available 
+         Implicit parameters (see <xref linkend="implicit-parameters"/>) are only available
          at the scope of a breakpoint if there is an explicit type signature.
        </para>
         </listitem>
@@ -1672,7 +1739,7 @@ $ ghci -package readline
 GHCi, version 6.8.1: http://www.haskell.org/ghc/  :? for help
 Loading package base ... linking ... done.
 Loading package readline-1.0 ... linking ... done.
-Prelude> 
+Prelude>
 </screen>
 
       <para>The following command works to load new packages into a
@@ -1690,7 +1757,7 @@ Prelude> :set -package <replaceable>name</replaceable>
     <sect2>
       <title>Extra libraries</title>
       <indexterm><primary>libraries</primary><secondary>with GHCi</secondary></indexterm>
-      
+
       <para>Extra libraries may be specified on the command line using
       the normal <literal>-l<replaceable>lib</replaceable></literal>
       option.  (The term <emphasis>library</emphasis> here refers to
@@ -1761,13 +1828,16 @@ $ ghci -lm
 
       <varlistentry>
        <term>
-          <literal>:add</literal> <replaceable>module</replaceable> ...
+          <literal>:add</literal> <optional><literal>*</literal></optional><replaceable>module</replaceable> ...
           <indexterm><primary><literal>:add</literal></primary></indexterm>
         </term>
        <listitem>
          <para>Add <replaceable>module</replaceable>(s) to the
          current <firstterm>target set</firstterm>, and perform a
-         reload.</para>
+         reload.  Normally pre-compiled code for the module will be
+         loaded if available, or otherwise the module will be
+         compiled to byte-code.  Using the <literal>*</literal>
+         prefix forces the module to be loaded as byte-code.</para>
        </listitem>
       </varlistentry>
 
@@ -1819,11 +1889,11 @@ $ ghci -lm
          modules from packages) only the non-<literal>*</literal>
     form of <literal>:browse</literal> is available.
     If the <literal>!</literal> symbol is appended to the
-    command, data constructors and class methods will be 
+    command, data constructors and class methods will be
     listed individually, otherwise, they will only be listed
-    in the context of their data type or class declaration. 
-    The <literal>!</literal>-form also annotates the listing 
-    with comments giving possible imports for each group of 
+    in the context of their data type or class declaration.
+    The <literal>!</literal>-form also annotates the listing
+    with comments giving possible imports for each group of
     entries.</para>
 <screen>
 Prelude> :browse! Data.Maybe
@@ -1891,7 +1961,7 @@ maybe :: b -> (a -> b) -> Maybe a -> b
 
       <varlistentry>
        <term>
-          <literal>:continue</literal> 
+          <literal>:continue</literal>
           <indexterm><primary><literal>:continue</literal></primary></indexterm>
         </term>
        <listitem><para>Continue the current evaluation, when stopped at a
@@ -1917,8 +1987,7 @@ maybe :: b -> (a -> b) -> Maybe a -> b
            used, respectively.  Tags for all the functions, constructors and
            types in the currently loaded modules are created.  All modules must
            be interpreted for these commands to work.</para>
-          <para>See also <xref linkend="hasktags" />.</para>
-       </listitem>
+        </listitem>
       </varlistentry>
 
       <varlistentry>
@@ -1998,7 +2067,7 @@ Prelude> :. cmds.ghci
 
       <varlistentry>
        <term>
-          <literal>:delete * | <replaceable>num</replaceable> ...</literal> 
+          <literal>:delete * | <replaceable>num</replaceable> ...</literal>
           <indexterm><primary><literal>:delete</literal></primary></indexterm>
         </term>
        <listitem>
@@ -2026,7 +2095,7 @@ Prelude> :. cmds.ghci
 
       <varlistentry>
        <term>
-          <literal>:etags</literal> 
+          <literal>:etags</literal>
         </term>
        <listitem>
          <para>See <literal>:ctags</literal>.</para>
@@ -2116,9 +2185,9 @@ Prelude> :. cmds.ghci
          the location of its definition in the source.</para>
          <para>For types and classes, GHCi also summarises instances that
          mention them.  To avoid showing irrelevant information, an instance
-         is shown only if (a) its head mentions <replaceable>name</replaceable>, 
+         is shown only if (a) its head mentions <replaceable>name</replaceable>,
          and (b) all the other things mentioned in the instance
-         are in scope (either qualified or otherwise) as a result of 
+         are in scope (either qualified or otherwise) as a result of
          a <literal>:load</literal> or <literal>:module</literal> commands. </para>
        </listitem>
       </varlistentry>
@@ -2138,7 +2207,7 @@ Prelude> :. cmds.ghci
 
       <varlistentry>
        <term>
-          <literal>:load</literal> <replaceable>module</replaceable> ...
+          <literal>:load</literal> <optional><literal>*</literal></optional><replaceable>module</replaceable> ...
           <indexterm><primary><literal>:load</literal></primary></indexterm>
         </term>
        <listitem>
@@ -2155,6 +2224,11 @@ Prelude> :. cmds.ghci
          to unload all the currently loaded modules and
          bindings.</para>
 
+          <para>Normally pre-compiled code for a module will be loaded
+         if available, or otherwise the module will be compiled to
+         byte-code.  Using the <literal>*</literal> prefix forces a
+         module to be loaded as byte-code.</para>
+
          <para>After a <literal>:load</literal> command, the current
          context is set to:</para>
 
@@ -2305,6 +2379,29 @@ bar
 
       <varlistentry>
        <term>
+          <literal>:run</literal>
+          <indexterm><primary><literal>:run</literal></primary></indexterm>
+        </term>
+       <listitem>
+         <para>See <literal>:main</literal>.</para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
+       <term>
+          <literal>:script</literal> <optional><replaceable>n</replaceable></optional>
+         <literal>filename</literal>
+          <indexterm><primary><literal>:script</literal></primary></indexterm>
+        </term>
+       <listitem>
+    <para>Executes the lines of a file as a series of GHCi commands.  This command
+    is compatible with multiline statements as set by <literal>:set +m</literal>
+    </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
+       <term>
           <literal>:set</literal> <optional><replaceable>option</replaceable>...</optional>
           <indexterm><primary><literal>:set</literal></primary></indexterm>
         </term>
@@ -2360,7 +2457,9 @@ bar
          Inside <replaceable>prompt</replaceable>, the sequence
          <literal>%s</literal> is replaced by the names of the
          modules currently in scope, and <literal>%%</literal> is
-         replaced by <literal>%</literal>.</para>
+         replaced by <literal>%</literal>. If <replaceable>prompt</replaceable>
+      starts with &quot; then it is parsed as a Haskell String;
+      otherwise it is treated as a literal string.</para>
         </listitem>
       </varlistentry>
 
@@ -2482,7 +2581,7 @@ bar
 
       <varlistentry>
        <term>
-          <literal>:step [<replaceable>expr</replaceable>]</literal> 
+          <literal>:step [<replaceable>expr</replaceable>]</literal>
           <indexterm><primary><literal>:step</literal></primary></indexterm>
         </term>
        <listitem>
@@ -2585,6 +2684,18 @@ bar
       <variablelist>
        <varlistentry>
          <term>
+            <literal>+m</literal>
+            <indexterm><primary><literal>+m</literal></primary></indexterm>
+          </term>
+         <listitem>
+           <para>Enable parsing of multiline commands.  A multiline command
+           is prompted for when the current input line contains open layout
+           contexts.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
             <literal>+r</literal>
             <indexterm><primary><literal>+r</literal></primary></indexterm>
             <indexterm><primary>CAFs</primary><secondary>in GHCi</secondary></indexterm>
@@ -2598,7 +2709,7 @@ bar
            top-level expressions to be discarded after each
            evaluation (they are still retained
            <emphasis>during</emphasis> a single evaluation).</para>
-         
+
            <para>This option may help if the evaluated top-level
            expressions are consuming large amounts of space, or if
            you need repeatable performance measurements.</para>
@@ -2646,7 +2757,7 @@ bar
 <screen>
 Prelude> :set -fglasgow-exts
 </screen>
-      
+
       <para>Any GHC command-line option that is designated as
       <firstterm>dynamic</firstterm> (see the table in <xref
       linkend="flag-reference"/>), may be set using
@@ -2725,7 +2836,7 @@ Prelude> :set -fno-glasgow-exts
 :def source readFile
 </screen>
 
-    <para>With this macro defined in your <filename>.ghci</filename> 
+    <para>With this macro defined in your <filename>.ghci</filename>
     file, you can use <literal>:source file</literal> to read GHCi
     commands from <literal>file</literal>. You can find (and contribute!-)
     other suggestions for <filename>.ghci</filename> files on this Haskell
@@ -2791,7 +2902,7 @@ Prelude> :set -fno-glasgow-exts
 
   <sect1 id="ghci-faq">
     <title>FAQ and Things To Watch Out For</title>
-    
+
     <variablelist>
       <varlistentry>
        <term>The interpreter can't load modules with foreign export
@@ -2880,6 +2991,13 @@ Prelude> :set -fno-glasgow-exts
             because this is normally what you want in an interpreter:
             output appears as it is generated.
           </para>
+          <para>
+            If you want line-buffered behaviour, as in GHC, you can
+            start your program thus:
+            <programlisting>
+               main = do { hSetBuffering stdout LineBuffering; ... }
+            </programlisting>
+          </para>
         </listitem>
       </varlistentry>
     </variablelist>
@@ -2889,7 +3007,6 @@ Prelude> :set -fno-glasgow-exts
 
 <!-- Emacs stuff:
      ;;; Local Variables: ***
-     ;;; mode: xml ***
      ;;; sgml-parent-document: ("users_guide.xml" "book" "chapter") ***
      ;;; End: ***
  -->