[project @ 2000-10-31 17:48:51 by simonmar]
[ghc-hetmet.git] / ghc / docs / users_guide / utils.sgml
1 <chapter id="utils">
2   <title>Other Haskell utility programs</title>
3   <indexterm><primary>utilities, Haskell</primary></indexterm>
4
5   <para>This section describes other program(s) which we distribute,
6   that help with the Great Haskell Programming Task.</para>
7
8 <!-- comment: hstags doesn't work anymore
9
10   <sect1 id="hstags">
11     <title>Emacs `TAGS' for Haskell: <command>hstags</command></title>
12     <indexterm><primary><command>hstags</command></primary></indexterm>
13     <indexterm><primary>TAGS for Haskell</primary></indexterm>
14
15     <para>`Tags' is a facility for indexing the definitions of
16     programming-language things in a multi-file program, and then
17     using that index to jump around among these definitions.</para>
18
19     <para>Rather than scratch your head, saying &ldquo;Now where did
20     we define `foo'?&rdquo;, you just do (in Emacs) <Literal>M-. foo
21     RET</Literal>, and You're There!  Some people go wild over this
22     stuff&hellip;</para>
23
24     <para>GHC comes with a program <command>hstags</command>, which
25     build Emacs-able TAGS files.  The invocation syntax is:</para>
26
27 <screen>
28 hstags [GHC-options] file [files...]
29 </screen>
30
31     <para>The best thing is just to feed it your GHC command-line
32     flags.  A good Makefile entry might be:</para>
33
34 <programlisting>
35 tags:
36         $(RM) TAGS
37         hstags $(GHC_FLAGS) *.lhs
38 </programlisting>
39
40     <para>The only flags of its own are: <Option>-v</Option> to be
41     verbose; <Option>-a</Option> to <Emphasis>APPEND</Emphasis> to the
42     TAGS file, rather than write to it.</para>
43
44     <para>Shortcomings: (1)&nbsp;Instance declarations don't get into
45     the TAGS file (but the definitions inside them do); as instances
46     aren't named, this is probably just as well.
47     (2)&nbsp;Data-constructor definitions don't get in.  Go for the
48     corresponding type constructor instead.</para>
49
50     <para>Actually, GHC also comes with <command>etags</command>
51     &lsqb;for C&rsqb;, and <Command>perltags</Command> &lsqb;for You
52     Know What&rsqb;.  And&mdash;I cannot tell a lie&mdash;there is
53     Denis Howe's <Command>fptags</Command> &lsqb;for Haskell,
54     etc.&rsqb; in the <Filename>ghc/CONTRIB</Filename>
55     section&hellip;)</para>
56
57   </sect1>
58 -->
59
60   <sect1 id="happy">
61     <title>&ldquo;Yacc for Haskell&rdquo;: <command>happy</command></title>
62
63     <indexterm><primary>Happy</primary></indexterm>
64     <indexterm><primary>Yacc for Haskell</primary></indexterm>
65     <indexterm><primary>parser generator for Haskell</primary></indexterm>
66
67     <para>Andy Gill and Simon Marlow have written a parser-generator
68     for Haskell, called
69     <Command>happy</Command>.<IndexTerm><Primary>happy parser
70     generator</Primary></IndexTerm> <command>Happy</command> is to
71     Haskell what <command>Yacc</command> is to C.</para>
72
73     <para>You can get <Command>happy</Command> from <ulink
74     url="http://www.haskell.org/happy/">the Happy
75     Homepage</ulink>.</para>
76
77     <para><command>Happy</command> is at its shining best when
78     compiled by GHC.</para>
79
80   </sect1>
81
82 <!-- we don't distribute this anymore
83   <sect1 id="pphs">
84     <title>Pretty-printing Haskell: <Command>pphs</Command></title>
85     <indexterm><primary>pphs</primary></indexterm>
86     <indexterm><primary>pretty-printing Haskell code</primary></indexterm>
87
88     <para>Andrew Preece has written
89     <Command>pphs</Command>,<IndexTerm><Primary>pphs</Primary></IndexTerm><IndexTerm><Primary>pretty-printing
90     Haskell</Primary></IndexTerm> a utility to pretty-print Haskell
91     code in LaTeX documents.  Keywords in bolds, variables in
92     italics&mdash;that sort of thing.  It is good at lining up program
93     clauses and equals signs, things that are very tiresome to do by
94     hand.</para>
95
96     <para>The code is distributed with GHC in
97     <Filename>ghc/CONTRIB/pphs</Filename>.</para>
98   </sect1>
99 -->
100
101   <sect1 id="hs2c">
102     <title>Writing Haskell interfaces to C code:
103     <command>hs2c</command></title>
104     <indexterm><primary><command>hs2c</command></primary>
105     </indexterm>
106
107     <para>The <command>hs2c</command> command can be used to automate
108     some parts of the process of writing Haskell bindings to C code.
109     It reads an almost-Haskell source with embedded special
110     constructs, and outputs a real Haskell file with these constructs
111     processed, based on information taken from some C headers. The
112     extra constructs deal with accessing C data from Haskell.</para>
113
114     <para>It may also output a C file which contains additional C
115     functions to be linked into the program, together with a C header
116     that gets included into the C code to which the Haskell module
117     will be compiled (when compiled via C) and into the C file. These
118     two files are created when the <literal>#def</literal> construct
119     is used.</para>
120
121     <para>Actually <command>hs2c</command> does not output the Haskell
122     file directly.  It creates a C program that includes the headers,
123     gets automatically compiled and run. That program outputs the
124     Haskell code.</para>
125
126     <para>In the following, &ldquo;Haskell file&rdquo; is the main
127     output (usually a <literal>.hs</literal> file), &ldquo;compiled
128     Haskell file&rdquo; is the Haskell file after
129     <command>ghc</command> has compiled it to C (i.e. a
130     <literal>.hc</literal> file), &ldquo;C program&rdquo; is the
131     program that outputs the Haskell file, &ldquo;C file&rdquo; is the
132     optionally generated C file, and &ldquo;C header&rdquo; is its
133     header file.</para>
134
135     <sect2>
136       <title>Command line syntax</title>
137
138       <para>glue-hsc takes input files as arguments, and flags that
139       modify its behavior:</para>
140
141       <variablelist>
142         <varlistentry>
143           <term><literal>-t FILE</literal> or
144           <literal>--template=FILE</literal></term>
145           <listitem>
146             <para>The template file (see below).</para>
147           </listitem>
148         </varlistentry>
149
150         <varlistentry>
151           <term><literal>--cc=PROG</literal></term>
152           <listitem>
153             <para>The C compiler to use (default:
154             <command>ghc</command>)</para>
155           </listitem>
156         </varlistentry>
157
158         <varlistentry>
159           <term><literal>--ld=PROG</literal></term>
160           <listitem>
161             <para>The linker to use (default:
162             <command>gcc</command>).</para>
163           </listitem>
164         </varlistentry>
165
166         <varlistentry>
167           <term><literal>--cflag=FLAG</literal></term>
168           <listitem>
169             <para>An extra flag to pass to the C compiler.</para>
170           </listitem>
171         </varlistentry>
172
173         <varlistentry>
174           <term><literal>--lflag=FLAG</literal></term>
175           <listitem>
176             <para>An extra flag to pass to the linker.</para>
177           </listitem>
178         </varlistentry>
179
180         <varlistentry>
181           <term><literal>--help</literal></term>
182           <listitem>
183             <para>Display a summary of the available flags.</para>
184           </listitem>
185         </varlistentry>
186       </variablelist>
187
188       <para>The input file should end with .hsc. Output files get
189       names with the <literal>.hsc</literal> suffix replaced:</para>
190
191       <informaltable>
192         <tgroup cols=2>
193           <tbody>
194             <row>
195               <entry><literal>.hs</literal></entry>
196               <entry>Haskell file</entry>
197             </row>
198             <row>
199               <entry><literal>_hsc.h</literal></entry>
200               <entry>C header</entry>
201             </row>
202             <row>
203               <entry><literal>_hsc.c</literal></entry>
204               <entry>C file</entry>
205             </row>
206           </tbody>
207         </tgroup>
208       </informaltable>
209
210       <para>The C program is compiled using the Haskell compiler. This
211       provides the include path to <filename>HsFFI.h</filename> which
212       is automatically included into the C program.</para>
213
214     </sect2>
215     <sect2><title>Input syntax</title>
216
217       <para>All special processing is triggered by the
218       <literal>#</literal> character. To output a literal
219       <literal>#</literal>, write it twice: <literal>##</literal>.</para>
220
221       <para>Otherwise <literal>#</literal> is followed by optional
222       spaces and tabs, an alphanumeric key that describes the kind of
223       processing, and its arguments. Arguments look like C expressions
224       and extend up to the nearest unmatched <literal>)</literal>,
225       <literal>]</literal>, or <literal>}</literal>, or to the end of
226       line outside any <literal>() [] {} '' "" /* */</literal>. Any
227       character may be preceded by a backslash and will not be treated
228       specially.</para>
229
230       <para>Meanings of specific keys:</para>
231
232       <variablelist>
233
234         <varlistentry>
235           <term><literal>#include &lt;file.h&gt;</literal></term>
236           <term><literal>#include "file.h"</literal></term>
237           <listitem>
238             <para>The specified file gets included into the C program,
239             the compiled Haskell file, and the C
240             header. <literal>&lt;HsFFI.h&gt;</literal> is included
241             automatically.</para>
242           </listitem>
243         </varlistentry>
244
245         <varlistentry>
246           <term><literal>#define name</literal></term>
247           <term><literal>#define name value</literal></term>
248           <listitem>
249             <para>Similar to <literal>#include</literal>. Note that
250             <literal>#includes</literal> and
251             <literal>#defines</literal> may be put in the same file
252             twice so they should not assume otherwise.</para>
253           </listitem>
254         </varlistentry>
255
256         <varlistentry>
257           <term><literal>#option opt</literal></term>
258           <listitem>
259             <para>The specified Haskell compiler command-line option
260             is placed in the <literal>{-# OPTIONS #-}</literal> pragma
261             at the top of the Haskell file (see <xref
262             linkend="source-file-options">). This is needed because
263             glue-hsc emits its own <literal>OPTIONS</literal> pragma,
264             and only one such pragma is interpreted by GHC.</para>
265           </listitem>
266         </varlistentry>
267
268         <varlistentry>
269           <term><literal>#def C_definition</literal></term>
270           <listitem>
271             <para>The definition (of a function, variable, struct or
272             typedef) is written to the C file, and its prototype or
273             extern declaration to the C header. Inline functions are
274             handled correctly.  struct definitions and typedefs are
275             written to the C program too.  The
276             <literal>inline</literal>, <literal>struct</literal> or
277             <literal>typedef</literal> keyword must come just after
278             <literal>def</literal>.</para>
279           </listitem>
280         </varlistentry>
281
282         <varlistentry>
283           <term><literal>#if condition</literal></term>
284           <term><literal>#ifdef name</literal></term>
285           <term><literal>#ifndef name</literal></term>
286           <term><literal>#elif condition</literal></term>
287           <term><literal>#else</literal></term>
288           <term><literal>#endif</literal></term>
289           <listitem>
290             <para>Conditional compilation directives are passed
291             unmodified to the C program, C file, and C header. Putting
292             them in the C program means that appropriate parts of the
293             Haskell file will be skipped.</para>
294           </listitem>
295         </varlistentry>
296
297         <varlistentry>
298           <term><literal>#const C_expression</literal></term>
299           <listitem>
300             <para>The expression must be convertible to
301             <literal>long</literal> or <literal>unsigned
302             long</literal>.  Its value (literal or negated literal)
303             will be output.</para>
304           </listitem>
305         </varlistentry>
306
307         <varlistentry>
308           <term><literal>#const_str C_expression</literal></term>
309           <listitem>
310             <para>The expression must be convertible to const char
311             pointer.  Its value (string literal) will be output.</para>
312           </listitem>
313         </varlistentry>
314
315         <varlistentry>
316           <term><literal>#type C_type</literal></term>
317           <listitem>
318             <para>A Haskell equivalent of the C numeric type will be
319             output.  It will be one of
320             <literal>{Int,Word}{8,16,32,64}</literal>,
321             <literal>Float</literal>, <literal>Double</literal>,
322             <literal>LDouble</literal>.</para>
323           </listitem>
324         </varlistentry>
325
326         <varlistentry>
327           <term><literal>#peek struct_type, field</literal></term>
328           <listitem>
329             <para>A function that peeks a field of a C struct will be
330             output.  It will have the type 
331               <literal>Storable b => Ptr a -> IO b</literal>.  
332
333             The intention is that <literal>#peek</literal> and
334             <literal>#poke</literal> can be used for implementing the
335             operations of class <literal>Storable</literal> for a
336             given C struct (see <xref linkend="sec-Storable">).</para>
337           </listitem>
338         </varlistentry>
339
340         <varlistentry>
341           <term><literal>#poke struct_type, field</literal></term>
342           <listitem>
343             <para>Similarly for poke. It will have the type 
344               <literal>Storable b => Ptr a -> b -> IO ()</literal>.</para>
345           </listitem>
346         </varlistentry>
347
348         <varlistentry>
349           <term><literal>#ptr struct_type, field</literal></term>
350           <listitem>
351             <para>Makes a pointer to a field struct. It will have the type
352             <literal>Ptr a -> Ptr b</literal>.</para>
353           </listitem>
354         </varlistentry>
355       </variablelist>
356
357     </sect2>
358
359     <sect2>
360       <title>Custom constructs</title>
361
362       <para><literal>#const</literal>, <literal>#type</literal>,
363       <literal>#peek</literal>, <literal>#poke</literal> and
364       <literal>#ptr</literal> are not hardwired into the
365       <command>hs2c</command>, but are defined in a C template that is
366       included in the C program: <filename>template-hsc.h</filename>.
367       Custom constructs and templates can be used too. Any
368       <literal>#</literal>-construct with unknown key is expected to
369       be handled by a C template.</para>
370
371       <para>A C template should define a macro or function with name
372       prefixed by <literal>hsc_</literal> that handles the construct
373       by emitting the expansion to stdout. See
374       <filename>template-hsc.h</filename> for examples.</para>
375
376     </sect2>
377
378   </sect1>
379
380 </chapter>
381
382 <!-- Emacs stuff:
383      ;;; Local Variables: ***
384      ;;; mode: sgml ***
385      ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter") ***
386      ;;; End: ***
387  -->