Add several new record features
[ghc-hetmet.git] / docs / users_guide / ffi-chap.xml
index ff8ef62..82f3899 100644 (file)
@@ -25,7 +25,7 @@ the <option>-fglasgow-exts</option><indexterm><primary><option>-fglasgow-exts</o
 
     <listitem>
       <para>GHC implements a number of GHC-specific extensions to the FFI
-      Addendum.  These extensions are described in <xref linkend="sec-ffi-ghcexts" />, but please note that programs using
+      Addendum.  These extensions are described in <xref linkend="ffi-ghcexts" />, but please note that programs using
       these features are not portable.  Hence, these features should be
       avoided where possible.</para>
     </listitem>
@@ -35,7 +35,7 @@ the <option>-fglasgow-exts</option><indexterm><primary><option>-fglasgow-exts</o
   documentation; see for example the <literal>Foreign</literal>
   module.</para>
 
-  <sect1 id="sec-ffi-ghcexts">
+  <sect1 id="ffi-ghcexts">
     <title>GHC extensions to the FFI Addendum</title>
 
     <para>The FFI features that are described in this section are specific to
@@ -81,7 +81,7 @@ OK:
 
   </sect1>
 
-  <sect1 id="sec-ffi-ghc">
+  <sect1 id="ffi-ghc">
     <title>Using the FFI with GHC</title>
 
     <para>The following sections also give some hints and tips on the
@@ -214,7 +214,41 @@ int main(int argc, char *argv[])
        <replaceable>M</replaceable> is
        <literal>__stginit_<replaceable>M</replaceable></literal>, and
        it may be declared as an external function symbol as in the
-       code above.</para>
+       code above.  Note that the symbol name should be transformed
+       according to the Z-encoding:</para>
+
+      <informaltable>
+       <tgroup cols="2" align="left" colsep="1" rowsep="1">
+         <thead>
+           <row>
+             <entry>Character</entry>
+             <entry>Replacement</entry>
+           </row>
+         </thead>
+         <tbody>
+           <row>
+             <entry><literal>.</literal></entry>
+             <entry><literal>zd</literal></entry>
+           </row>
+           <row>
+             <entry><literal>_</literal></entry>
+             <entry><literal>zu</literal></entry>
+           </row>
+           <row>
+             <entry><literal>`</literal></entry>
+             <entry><literal>zq</literal></entry>
+           </row>
+           <row>
+             <entry><literal>Z</literal></entry>
+             <entry><literal>ZZ</literal></entry>
+           </row>
+           <row>
+             <entry><literal>z</literal></entry>
+             <entry><literal>zz</literal></entry>
+           </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
 
        <para>After we've finished invoking our Haskell functions, we
        can call <literal>hs_exit()</literal>, which