Preliminary monad-comprehension patch (Trac #4370)
[ghc-hetmet.git] / docs / users_guide / bugs.xml
index fdeeaa8..803f9a8 100644 (file)
@@ -105,7 +105,21 @@ main = do args <- getArgs
       <sect3 id="infelicities-Modules">
        <title>Module system and interface files</title>
        
-       <para>None known.</para>
+       <para>GHC requires the use of <literal>hs-boot</literal>
+         files to cut the recursive loops among mutually recursive modules
+         as described in <xref linkend="mutual-recursion"/>.  This more of an infelicity
+           than a bug: the Haskell Report says 
+         (<ulink url="http://haskell.org/onlinereport/modules.html#sect5.7">Section 5.7</ulink>) "Depending on the Haskell
+       implementation used, separate compilation of mutually
+       recursive modules may require that imported modules contain
+       additional information so that they may be referenced before
+       they are compiled. Explicit type signatures for all exported
+       values may be necessary to deal with mutual recursion. The
+       precise details of separate compilation are not defined by
+       this Report."
+
+       </para>
+
     </sect3>
 
     <sect3 id="infelicities-numbers">
@@ -178,15 +192,21 @@ checking for duplicates.  The reason for this is efficiency, pure and simple.
            </listitem>
          </varlistentry>
 
-         <varlistentry>
-           <term>Strings treated as ISO-8859-1</term>
-           <listitem>
-             <para>
-            Various library functions, such as <literal>putStrLn</literal>,
-            treat Strings as if they were ISO-8859-1 rather than UTF-8.
-          </para>
-           </listitem>
-         </varlistentry>
+          <varlistentry>
+            <term><literal>hGetContents</literal></term>
+            <listitem>
+              <para>
+                Lazy I/O throws an exception if an error is
+                encountered, in contrast to the Haskell 98 spec which
+                requires that errors are discarded (see Section 21.2.2
+                of the Haskell 98 report).  The exception thrown is
+                the usual IO exception that would be thrown if the
+                failing IO operation was performed in the IO monad, and can
+                be caught by <literal>System.IO.Error.catch</literal>
+                or <literal>Control.Exception.catch</literal>.
+              </para>
+            </listitem>
+          </varlistentry>
        </variablelist>
     </sect3>
   </sect2>
@@ -284,6 +304,24 @@ checking for duplicates.  The reason for this is efficiency, pure and simple.
     </variablelist>
       
     </sect2>
+
+  <sect2 id="ffi-divergence">
+    <title>Divergence from the FFI specification</title>
+    
+    <variablelist>
+      <varlistentry>
+        <term><literal>hs_init()</literal> not allowed
+        after <literal>hs_exit()</literal></term>
+        <listitem>
+          <para>The FFI spec requires the implementation to support
+            re-initialising itself after being shut down
+            with <literal>hs_exit()</literal>, but GHC does not
+            currently support that.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+  </sect2>
+    
   </sect1>
 
 
@@ -401,7 +439,6 @@ Loading package javavm ... linking ... WARNING: Overflown relocation field (# re
 
 <!-- Emacs stuff:
      ;;; Local Variables: ***
-     ;;; mode: xml ***
      ;;; sgml-parent-document: ("users_guide.xml" "book" "chapter") ***
      ;;; End: ***
  -->