[project @ 2004-02-12 02:04:59 by mthomas]
[ghc-hetmet.git] / ghc / docs / users_guide / glasgow_exts.sgml
index db91ac0..baf9ef7 100644 (file)
@@ -1598,7 +1598,7 @@ declarations
 </programlisting>
 
 "overlap" if <literal>type1</literal> and <literal>type2</literal> unify.
-
+</para>
 <para>
 However, if you give the command line option
 <option>-fallow-overlapping-instances</option><indexterm><primary>-fallow-overlapping-instances
@@ -3184,6 +3184,12 @@ the background to
 the main technical innovations is discussed in "<ulink
 url="http://research.microsoft.com/~simonpj/papers/meta-haskell">
 Template Meta-programming for Haskell</ulink>" (Proc Haskell Workshop 2002).
+The details of the Template Haskell design are still in flux.  Make sure you
+consult the <ulink url="http://www.haskell.org/ghc/docs/latest/html/libraries/index.html">online library reference material</ulink> 
+(search for the type ExpQ).
+[Temporary: many changes to the original design are described in 
+      <ulink url="http://research.microsoft.com/~simonpj/tmp/notes2.ps">"http://research.microsoft.com/~simonpj/tmp/notes2.ps"</ulink>.
+Not all of these changes are in GHC 6.2.]
 </para>
 
 <para> The first example from that paper is set out below as a worked example to help get you started. 
@@ -3289,6 +3295,7 @@ Tim Sheard is going to expand it.)
   First cut and paste the two modules below into "Main.hs" and "Printf.hs":</para>
 
 <programlisting>
+
 {- Main.hs -}
 module Main where
 
@@ -3299,9 +3306,8 @@ import Printf ( pr )
 -- generated at compile time by "pr" and splices it into
 -- the argument of "putStrLn".
 main = putStrLn ( $(pr "Hello") )
-</programlisting>
 
-<programlisting>
+
 {- Printf.hs -}
 module Printf where
 
@@ -3324,14 +3330,14 @@ parse s   = [ L s ]
 -- Generate Haskell source code from a parsed representation
 -- of the format string.  This code will be spliced into
 -- the module which calls "pr", at compile time.
-gen :: [Format] -> Expr
+gen :: [Format] -> ExpQ
 gen [D]   = [| \n -> show n |]
 gen [S]   = [| \s -> s |]
-gen [L s] = string s
+gen [L s] = stringE s
 
 -- Here we generate the Haskell code for the splice
 -- from an input format string.
-pr :: String -> Expr
+pr :: String -> ExpQ
 pr s      = gen (parse s)
 </programlisting>
 
@@ -3943,7 +3949,7 @@ Assertion failures can be caught, see the documentation for the
 
       <para>The DEPRECATED pragma lets you specify that a particular
       function, class, or type, is deprecated.  There are two
-      forms.</para>
+      forms.
 
       <itemizedlist>
        <listitem>
@@ -3968,7 +3974,15 @@ Assertion failures can be caught, see the documentation for the
           message.</para>
        </listitem>
       </itemizedlist>
-
+      Any use of the deprecated item, or of anything from a deprecated
+      module, will be flagged with an appropriate message.  However,
+      deprecations are not reported for
+      (a) uses of a deprecated function within its defining module, and
+      (b) uses of a deprecated function in an export list.
+      The latter reduces spurious complaints within a library
+      in which one module gathers together and re-exports 
+      the exports of several others.
+      </para>
       <para>You can suppress the warnings with the flag
       <option>-fno-warn-deprecations</option>.</para>
     </sect2>