<para>The hash sign does not change semantics at all. We tend to use variable
names ending in "#" for unboxed values or types (e.g. <literal>Int#</literal>),
- but there is no requirement to do so; they are just plain ordinary variables.
+ but there is no requirement to do so; they are just plain ordinary variables.
Nor does the <option>-XMagicHash</option> extension bring anything into scope.
For example, to bring <literal>Int#</literal> into scope you must
import <literal>GHC.Prim</literal> (see <xref linkend="primitives"/>);
T1 :: Eq b => b -> b -> T b
T2 :: (Show c, Ix c) => c -> [c] -> T c
</programlisting>
-When patten matching, these constraints are made available to discharge constraints
+When pattern matching, these constraints are made available to discharge constraints
in the body of the match. For example:
<programlisting>
f :: T a -> String
<programlisting>
-- Context assertion no smaller than head
instance C a => C a where ...
- -- (C b b) has more more occurrences of b than the head
+ -- (C b b) has more occurrences of b than the head
instance C b b => Foo [b] where ...
</programlisting>
</para>
must have type <literal>Q [Dec]</literal></para></listitem>
</itemizedlist>
Note that pattern splices are not supported.
- Inside a splice you can can only call functions defined in imported modules,
+ Inside a splice you can only call functions defined in imported modules,
not functions defined elsewhere in the same module.</para></listitem>
<listitem><para>
of the Haskell Report.
In the translation box, first apply
the following transformation: for each pattern <literal>pi</literal> that is of
-form <literal>!qi = ei</literal>, transform it to <literal>(xi,!qi) = ((),ei)</literal>, and and replace <literal>e0</literal>
+form <literal>!qi = ei</literal>, transform it to <literal>(xi,!qi) = ((),ei)</literal>, and replace <literal>e0</literal>
by <literal>(xi `seq` e0)</literal>. Then, when none of the left-hand-side patterns
have a bang at the top, apply the rules in the existing box.
</para>