Commit bc35c8ed authored by simonpj@microsoft.com's avatar simonpj@microsoft.com
Browse files

Clarify documentatoin

parent a5984078
...@@ -5322,9 +5322,13 @@ f xs = ys ++ ys ...@@ -5322,9 +5322,13 @@ f xs = ys ++ ys
ys :: [a] ys :: [a]
ys = reverse xs ys = reverse xs
</programlisting> </programlisting>
The type signature for <literal>f</literal> brings the type variable <literal>a</literal> into scope; it scopes over The type signature for <literal>f</literal> brings the type variable <literal>a</literal> into scope,
the entire definition of <literal>f</literal>. because of the explicit <literal>forall</literal> (<xref linkend="decl-type-sigs"/>).
In particular, it is in scope at the type signature for <varname>ys</varname>. The type variables bound by a <literal>forall</literal> scope over
the entire definition of the accompanying value declaration.
In this example, the type variable <literal>a</literal> scopes over the whole
definition of <literal>f</literal>, including over
the type signature for <varname>ys</varname>.
In Haskell 98 it is not possible to declare In Haskell 98 it is not possible to declare
a type for <varname>ys</varname>; a major benefit of scoped type variables is that a type for <varname>ys</varname>; a major benefit of scoped type variables is that
it becomes possible to do so. it becomes possible to do so.
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment