Remove trailing spaces from programlisting lines
[ghc-hetmet.git] / docs / users_guide / glasgow_exts.xml
index 7e78c72..80c4008 100644 (file)
@@ -1152,16 +1152,16 @@ GHC allows a small extension to the syntax of left operator sections, which
 allows you to define postfix operators.  The extension is this:  the left section
 <programlisting>
   (e !)
-</programlisting> 
+</programlisting>
 is equivalent (from the point of view of both type checking and execution) to the expression
 <programlisting>
   ((!) e)
-</programlisting> 
+</programlisting>
 (for any expression <literal>e</literal> and operator <literal>(!)</literal>.
 The strict Haskell 98 interpretation is that the section is equivalent to
 <programlisting>
   (\y -> (!) e y)
-</programlisting> 
+</programlisting>
 That is, the operator must be a function of two arguments.  GHC allows it to
 take only one argument, and that in turn allows you to write the function
 postfix.
@@ -1744,11 +1744,6 @@ dictionaries for <literal>Eq</literal> and <literal>Show</literal> respectively,
 extract it on pattern matching.
 </para>
 
-<para>
-Notice the way that the syntax fits smoothly with that used for
-universal quantification earlier.
-</para>
-
 </sect3>
 
 <sect3 id="existential-records">
@@ -2021,9 +2016,9 @@ In the example, the equality dictionary is used to satisfy the equality constrai
 generated by the call to <literal>elem</literal>, so that the type of
 <literal>insert</literal> itself has no <literal>Eq</literal> constraint.
 </para>
-<para>This behaviour contrasts with Haskell 98's peculiar treament of 
+<para>This behaviour contrasts with Haskell 98's peculiar treatment of 
 contexts on a data type declaration (Section 4.2.1 of the Haskell 98 Report).
-In Haskell 98 the defintion
+In Haskell 98 the definition
 <programlisting>
   data Eq a => Set' a = MkSet' [a]
 </programlisting>
@@ -2132,7 +2127,7 @@ field <literal>f</literal> must be the same (modulo alpha conversion).
 <para>
 At the moment, record updates are not yet possible with GADT-style declarations, 
 so support is limited to record construction, selection and pattern matching.
-For exmaple
+For example
 <programlisting>
   aPerson = Adult { name = "Fred", children = [] }
 
@@ -2239,7 +2234,7 @@ constructor).
 
 <listitem><para>
 You cannot use a <literal>deriving</literal> clause for a GADT; only for
-an ordianary data type.
+an ordinary data type.
 </para></listitem>
 
 <listitem><para>
@@ -2307,7 +2302,7 @@ The third is not Haskell 98, and risks losing termination of instances.
 <para>
 GHC takes a conservative position: it accepts the first two, but not the third.  The  rule is this:
 each constraint in the inferred instance context must consist only of type variables, 
-with no repititions.
+with no repetitions.
 </para>
 <para>
 This rule is applied regardless of flags.  If you want a more exotic context, you can write
@@ -2343,7 +2338,7 @@ For example:
   deriving instance MonadState Int Foo
 </programlisting>
 GHC always treats the <emphasis>last</emphasis> parameter of the instance
-(<literal>Foo</literal> in this exmample) as the type whose instance is being derived.
+(<literal>Foo</literal> in this example) as the type whose instance is being derived.
 </para>
 
 </sect2>
@@ -2393,14 +2388,14 @@ Haskell 98, you can inherit instances of <literal>Eq</literal>, <literal>Ord</li
 other classes you have to write an explicit instance declaration. For
 example, if you define
 
-<programlisting> 
+<programlisting>
   newtype Dollars = Dollars Int 
-</programlisting> 
+</programlisting>
 
 and you want to use arithmetic on <literal>Dollars</literal>, you have to
 explicitly define an instance of <literal>Num</literal>:
 
-<programlisting> 
+<programlisting>
   instance Num Dollars where
     Dollars a + Dollars b = Dollars (a+b)
     ...
@@ -2418,17 +2413,17 @@ dictionary, only slower!
 GHC now permits such instances to be derived instead, 
 using the flag <option>-XGeneralizedNewtypeDeriving</option>,
 so one can write 
-<programlisting> 
+<programlisting>
   newtype Dollars = Dollars Int deriving (Eq,Show,Num)
-</programlisting> 
+</programlisting>
 
 and the implementation uses the <emphasis>same</emphasis> <literal>Num</literal> dictionary
 for <literal>Dollars</literal> as for <literal>Int</literal>. Notionally, the compiler
 derives an instance declaration of the form
 
-<programlisting> 
+<programlisting>
   instance Num Int => Num Dollars
-</programlisting> 
+</programlisting>
 
 which just adds or removes the <literal>newtype</literal> constructor according to the type.
 </para>
@@ -2438,27 +2433,27 @@ We can also derive instances of constructor classes in a similar
 way. For example, suppose we have implemented state and failure monad
 transformers, such that
 
-<programlisting> 
+<programlisting>
   instance Monad m => Monad (State s m) 
   instance Monad m => Monad (Failure m)
-</programlisting> 
+</programlisting>
 In Haskell 98, we can define a parsing monad by 
-<programlisting> 
+<programlisting>
   type Parser tok m a = State [tok] (Failure m) a
-</programlisting> 
+</programlisting>
 
 which is automatically a monad thanks to the instance declarations
 above. With the extension, we can make the parser type abstract,
 without needing to write an instance of class <literal>Monad</literal>, via
 
-<programlisting> 
+<programlisting>
   newtype Parser tok m a = Parser (State [tok] (Failure m) a)
                          deriving Monad
 </programlisting>
 In this case the derived instance declaration is of the form 
-<programlisting> 
+<programlisting>
   instance Monad (State [tok] (Failure m)) => Monad (Parser tok m) 
-</programlisting> 
+</programlisting>
 
 Notice that, since <literal>Monad</literal> is a constructor class, the
 instance is a <emphasis>partial application</emphasis> of the new type, not the
@@ -2473,12 +2468,12 @@ newtype is the last class parameter. In this case, a ``partial
 application'' of the class appears in the <literal>deriving</literal>
 clause. For example, given the class
 
-<programlisting> 
+<programlisting>
   class StateMonad s m | m -> s where ... 
   instance Monad m => StateMonad s (State s m) where ... 
-</programlisting> 
+</programlisting>
 then we can derive an instance of <literal>StateMonad</literal> for <literal>Parser</literal>s by 
-<programlisting> 
+<programlisting>
   newtype Parser tok m a = Parser (State [tok] (Failure m) a)
                          deriving (Monad, StateMonad [tok])
 </programlisting>
@@ -2486,7 +2481,7 @@ then we can derive an instance of <literal>StateMonad</literal> for <literal>Par
 The derived instance is obtained by completing the application of the
 class to the new type:
 
-<programlisting> 
+<programlisting>
   instance StateMonad [tok] (State [tok] (Failure m)) =>
            StateMonad [tok] (Parser tok m)
 </programlisting>
@@ -2506,9 +2501,9 @@ the newtype and its representation.
 Derived instance declarations are constructed as follows. Consider the
 declaration (after expansion of any type synonyms)
 
-<programlisting> 
+<programlisting>
   newtype T v1...vn = T' (t vk+1...vn) deriving (c1...cm) 
-</programlisting> 
+</programlisting>
 
 where 
  <itemizedlist>
@@ -2537,17 +2532,17 @@ where
 </itemizedlist>
 Then, for each <literal>ci</literal>, the derived instance
 declaration is:
-<programlisting> 
+<programlisting>
   instance ci t => ci (T v1...vk)
 </programlisting>
 As an example which does <emphasis>not</emphasis> work, consider 
-<programlisting> 
+<programlisting>
   newtype NonMonad m s = NonMonad (State s m s) deriving Monad 
-</programlisting> 
+</programlisting>
 Here we cannot derive the instance 
-<programlisting> 
+<programlisting>
   instance Monad (State s m) => Monad (NonMonad m) 
-</programlisting> 
+</programlisting>
 
 because the type variable <literal>s</literal> occurs in <literal>State s m</literal>,
 and so cannot be "eta-converted" away. It is a good thing that this
@@ -2561,7 +2556,7 @@ Notice also that the <emphasis>order</emphasis> of class parameters becomes
 important, since we can only derive instances for the last one. If the
 <literal>StateMonad</literal> class above were instead defined as
 
-<programlisting> 
+<programlisting>
   class StateMonad m s | m -> s where ... 
 </programlisting>
 
@@ -3149,7 +3144,7 @@ typechecker loop:
   class F a b | a->b
   instance F [a] [[a]]
   instance (D c, F a c) => D [a]   -- 'c' is not mentioned in the head
-</programlisting>  
+</programlisting>
 Similarly, it can be tempting to lift the coverage condition:
 <programlisting>
   class Mul a b c | a b -> c where
@@ -3259,7 +3254,7 @@ by which time more is known about the type <literal>b</literal>.
 The willingness to be overlapped or incoherent is a property of 
 the <emphasis>instance declaration</emphasis> itself, controlled by the
 presence or otherwise of the <option>-XOverlappingInstances</option> 
-and <option>-XIncoherentInstances</option> flags when that mdodule is
+and <option>-XIncoherentInstances</option> flags when that module is
 being defined.  Neither flag is required in a module that imports and uses the
 instance declaration.  Specifically, during the lookup process:
 <itemizedlist>
@@ -3372,7 +3367,7 @@ instance IsString [Char] where
     fromString cs = cs
 </programlisting>
 The class <literal>IsString</literal> is not in scope by default.  If you want to mention
-it explicitly (for exmaple, to give an instance declaration for it), you can import it
+it explicitly (for example, to give an instance declaration for it), you can import it
 from module <literal>GHC.Exts</literal>.
 </para>
 <para>
@@ -3553,7 +3548,7 @@ J Lewis, MB Shields, E Meijer, J Launchbury,
 Boston, Jan 2000.
 </para>
 
-<para>(Most of the following, stil rather incomplete, documentation is
+<para>(Most of the following, still rather incomplete, documentation is
 due to Jeff Lewis.)</para>
 
 <para>Implicit parameter support is enabled with the option
@@ -3733,7 +3728,7 @@ In the former case, <literal>len_acc1</literal> is monomorphic in its own
 right-hand side, so the implicit parameter <literal>?acc</literal> is not
 passed to the recursive call.  In the latter case, because <literal>len_acc2</literal>
 has a type signature, the recursive call is made to the
-<emphasis>polymoprhic</emphasis> version, which takes <literal>?acc</literal>
+<emphasis>polymorphic</emphasis> version, which takes <literal>?acc</literal>
 as an implicit parameter.  So we get the following results in GHCi:
 <programlisting>
   Prog> len1 "hello"
@@ -3858,7 +3853,7 @@ Other points:
 <itemizedlist>
 <listitem> <para> '<literal>?x</literal>' and '<literal>%x</literal>' 
 are entirely distinct implicit parameters: you 
-  can use them together and they won't intefere with each other. </para>
+  can use them together and they won't interfere with each other. </para>
 </listitem>
 
 <listitem> <para> You can bind linear implicit parameters in 'with' clauses. </para> </listitem>
@@ -4371,7 +4366,7 @@ a <emphasis>type</emphasis>. (This is a change from GHC's earlier
 design.)</para></listitem>
 <listitem><para>Furthermore, distinct lexical type variables stand for distinct
 type variables.  This means that every programmer-written type signature
-(includin one that contains free scoped type variables) denotes a
+(including one that contains free scoped type variables) denotes a
 <emphasis>rigid</emphasis> type; that is, the type is fully known to the type
 checker, and no inference is involved.</para></listitem>
 <listitem><para>Lexical type variables may be alpha-renamed freely, without
@@ -4388,7 +4383,7 @@ A <emphasis>lexically scoped type variable</emphasis> can be bound by:
 </itemizedlist>
 </para>
 <para>
-In Haskell, a programmer-written type signature is implicitly quantifed over
+In Haskell, a programmer-written type signature is implicitly quantified over
 its free type variables (<ulink
 url="http://haskell.org/onlinereport/decls.html#sect4.1.2">Section
 4.1.2</ulink> 
@@ -4463,7 +4458,7 @@ For example:
   g (x::a) = x
   h ((x,y) :: (Int,Bool)) = (y,x)
 </programlisting>
-In the case where all the type variables in the pattern type sigature are
+In the case where all the type variables in the pattern type signature are
 already in scope (i.e. bound by the enclosing context), matters are simple: the
 signature simply constrains the type of the pattern in the obvious way.
 </para>
@@ -4489,7 +4484,7 @@ existentially-bound type variable.
 <para>
 If this seems a little odd, we think so too.  But we must have
 <emphasis>some</emphasis> way to bring such type variables into scope, else we
-could not name existentially-bound type variables in subequent type signatures.
+could not name existentially-bound type variables in subsequent type signatures.
 </para>
 <para>
 This is (now) the <emphasis>only</emphasis> situation in which a pattern type 
@@ -4614,12 +4609,12 @@ This is rejected by Haskell 98, but under Jones's scheme the definition for
 <literal>g</literal> is typechecked first, separately from that for
 <literal>f</literal>,
 because the reference to <literal>f</literal> in <literal>g</literal>'s right
-hand side is ingored by the dependency analysis.  Then <literal>g</literal>'s
+hand side is ignored by the dependency analysis.  Then <literal>g</literal>'s
 type is generalised, to get
 <programlisting>
   g :: Ord a =&gt; a -> Bool
 </programlisting>
-Now, the defintion for <literal>f</literal> is typechecked, with this type for
+Now, the definition for <literal>f</literal> is typechecked, with this type for
 <literal>g</literal> in the type environment.
 </para>
 
@@ -4910,7 +4905,7 @@ The basic idea is to compile the program twice:</para>
   <para>Then compile it again with <option>-prof</option>, and
   additionally use <option>-osuf
   p_o</option><indexterm><primary><option>-osuf</option></primary></indexterm>
-  to name the object files differentliy (you can choose any suffix
+  to name the object files differently (you can choose any suffix
   that isn't the normal object suffix here).  GHC will automatically
   load the object files built in the first step when executing splice
   expressions.  If you omit the <option>-osuf</option> flag when
@@ -5468,7 +5463,7 @@ g6 x = case f x of { y -&gt; body }
 g7 x = case f x of { !y -&gt; body }
 </programlisting>
 The functions <literal>g5</literal> and <literal>g6</literal> mean exactly the same thing.  
-But <literal>g7</literal> evalutes <literal>(f x)</literal>, binds <literal>y</literal> to the
+But <literal>g7</literal> evaluates <literal>(f x)</literal>, binds <literal>y</literal> to the
 result, and then evaluates <literal>body</literal>.
 </para><para>
 Bang patterns work in <literal>let</literal> and <literal>where</literal>
@@ -5781,7 +5776,7 @@ Assertion failures can be caught, see the documentation for the
          <para>When you compile any module that imports and uses any
           of the specified entities, GHC will print the specified
           message.</para>
-         <para> You can only depecate entities declared at top level in the module
+         <para> You can only deprecate entities declared at top level in the module
          being compiled, and you can only use unqualified names in the list of
          entities being deprecated.  A capitalised name, such as <literal>T</literal>
          refers to <emphasis>either</emphasis> the type constructor <literal>T</literal>
@@ -6013,7 +6008,7 @@ happen.
 <programlisting>
   {-# SPECIALIZE f :: &lt;type&gt; #-}
 </programlisting>
-      is valid if and only if the defintion
+      is valid if and only if the definition
 <programlisting>
   f_spec :: &lt;type&gt;
   f_spec = f
@@ -6029,7 +6024,7 @@ happen.
 
   h :: Eq a => a -> a -> a
   {-# SPECIALISE h :: (Eq a) => [a] -> [a] -> [a] #-}
-</programlisting>  
+</programlisting>
 The last of these examples will generate a 
 RULE with a somewhat-complex left-hand side (try it yourself), so it might not fire very
 well.  If you use this kind of specialisation, let us know how well it works.
@@ -6038,7 +6033,7 @@ well.  If you use this kind of specialisation, let us know how well it works.
 <para>A <literal>SPECIALIZE</literal> pragma can optionally be followed with a
 <literal>INLINE</literal> or <literal>NOINLINE</literal> pragma, optionally 
 followed by a phase, as described in <xref linkend="inline-noinline-pragma"/>.
-The <literal>INLINE</literal> pragma affects the specialised verison of the
+The <literal>INLINE</literal> pragma affects the specialised version of the
 function (only), and applies even if the function is recursive.  The motivating
 example is this:
 <programlisting>
@@ -6734,7 +6729,7 @@ If you add <option>-dppr-debug</option> you get a more detailed listing.
 <listitem>
 
 <para>
- The definition of (say) <function>build</function> in <filename>GHC/Base.lhs</filename> looks llike this:
+ The definition of (say) <function>build</function> in <filename>GHC/Base.lhs</filename> looks like this:
 
 <programlisting>
         build   :: forall a. (forall b. (a -> b -> b) -> b -> b) -> [a]
@@ -6831,7 +6826,7 @@ r) ->
 
 <sect1 id="special-ids">
 <title>Special built-in functions</title>
-<para>GHC has a few built-in funcions with special behaviour.  These
+<para>GHC has a few built-in functions with special behaviour.  These
 are now described in the module <ulink
 url="../libraries/base/GHC-Prim.html"><literal>GHC.Prim</literal></ulink>
 in the library documentation.</para>
@@ -7001,7 +6996,7 @@ So this too is illegal:
     op2 :: a -> Bool
     op2 {| p :*: q |} (x :*: y) = False
 </programlisting>
-(The reason for this restriction is that we gather all the equations for a particular type consructor
+(The reason for this restriction is that we gather all the equations for a particular type constructor
 into a single generic instance declaration.)
 </para>
 </listitem>
@@ -7032,7 +7027,7 @@ Here, op1, op2, op3 are OK, but op4 is rejected, because it has a type variable
 inside a list.  
 </para>
 <para>
-This restriction is an implementation restriction: we just havn't got around to
+This restriction is an implementation restriction: we just haven't got around to
 implementing the necessary bidirectional maps over arbitrary type constructors.
 It would be relatively easy to add specific type constructors, such as Maybe and list,
 to the ones that are allowed.</para>