Fix defaulting for overloaded strings
[ghc-hetmet.git] / docs / users_guide / glasgow_exts.xml
index dfedb08..a8c91df 100644 (file)
@@ -4086,15 +4086,39 @@ The class <literal>IsString</literal> is defined as:
 class IsString a where
     fromString :: String -> a
 </programlisting>
-And the only predefined instance is the obvious one to make strings work as usual:
+The only predefined instance is the obvious one to make strings work as usual:
 <programlisting>
 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
+from module <literal>GHC.Exts</literal>.
+</para>
+<para>
+Haskell's defaulting mechanism is extended to cover string literals, when <option>-foverloaded-strings</option> is specified.
+Specifically:
+<itemizedlist>
+<listitem><para>
+Each type in a default declaration must be an 
+instance of <literal>Num</literal> <emphasis>or</emphasis> of <literal>IsString</literal>.
+</para></listitem>
+
+<listitem><para>
+The standard defaulting rule (<ulink url="http://haskell.org/onlinereport/decls.html#sect4.3.4">Haskell Report, Section 4.3.4</ulink>)
+is extended thus: defaulting applies when all the unresolved constraints involve standard classes
+<emphasis>or</emphasis> <literal>IsString</literal>; and at least one is a numeric class
+<emphasis>or</emphasis> <literal>IsString</literal>.
+</para></listitem>
+</itemizedlist>
 </para>
 <para>
 A small example:
 <programlisting>
+module Main where
+
+import GHC.Exts( IsString(..) )
+
 newtype MyString = MyString String deriving (Eq, Show)
 instance IsString MyString where
     fromString = MyString