[project @ 2001-01-13 12:11:00 by qrczak]
[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="hsc2hs">
102     <title>Writing Haskell interfaces to C code:
103     <command>hsc2hs</command></title>
104     <indexterm><primary><command>hsc2hs</command></primary>
105     </indexterm>
106
107     <para>The <command>hsc2hs</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 (see below).</para>
120
121     <para>Actually <command>hsc2hs</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><command>hsc2hs</command> takes input files as arguments,
139       and flags that 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>-I DIR</literal></term>
175           <listitem>
176             <para>Passed to the C compiler.</para>
177           </listitem>
178         </varlistentry>
179
180         <varlistentry>
181           <term><literal>--lflag=FLAG</literal></term>
182           <listitem>
183             <para>An extra flag to pass to the linker.</para>
184           </listitem>
185         </varlistentry>
186
187         <varlistentry>
188           <term><literal>--include=FILE</literal></term>
189           <listitem>
190             <para>As if the appropriate <literal>#include</literal>
191             directive was placed in the source.</para>
192           </listitem>
193         </varlistentry>
194
195         <varlistentry>
196           <term><literal>--help</literal></term>
197           <listitem>
198             <para>Display a summary of the available flags.</para>
199           </listitem>
200         </varlistentry>
201       </variablelist>
202
203       <para>The input file should end with .hsc. Output files get
204       names with the <literal>.hsc</literal> suffix replaced:</para>
205
206       <informaltable>
207         <tgroup cols=2>
208           <tbody>
209             <row>
210               <entry><literal>.hs</literal></entry>
211               <entry>Haskell file</entry>
212             </row>
213             <row>
214               <entry><literal>.hs.h</literal></entry>
215               <entry>C header</entry>
216             </row>
217             <row>
218               <entry><literal>.hs.c</literal></entry>
219               <entry>C file</entry>
220             </row>
221           </tbody>
222         </tgroup>
223       </informaltable>
224
225       <para>The C program is compiled using the Haskell compiler. This
226       provides the include path to <filename>HsFFI.h</filename> which
227       is automatically included into the C program.</para>
228
229     </sect2>
230     <sect2><title>Input syntax</title>
231
232       <para>All special processing is triggered by the
233       <literal>#</literal> character placed outside Haskell comments
234       and string literals. To output a literal <literal>#</literal>,
235       write it twice: <literal>##</literal>.</para>
236
237       <para>Otherwise <literal>#</literal> is followed by optional
238       spaces and tabs, an alphanumeric key that describes the
239       kind of processing, and its arguments. Arguments look
240       like C expressions separated by commas and extend up to the
241       nearest unmatched <literal>)</literal>, <literal>]</literal>,
242       or <literal>}</literal>, or to the end of line outside any
243       <literal>() [] {} '' "" /* */</literal>. Any character may be
244       preceded by a backslash and will not be treated specially.</para>
245
246       <para>Meanings of specific keys:</para>
247
248       <variablelist>
249
250         <varlistentry>
251           <term><literal>#include &lt;file.h&gt;</literal></term>
252           <term><literal>#include "file.h"</literal></term>
253           <listitem>
254             <para>The specified file gets included into the C program,
255             the compiled Haskell file, and the C header.
256             <literal>&lt;HsFFI.h&gt;</literal> is included
257             automatically.</para>
258           </listitem>
259         </varlistentry>
260
261         <varlistentry>
262           <term><literal>#define name</literal></term>
263           <term><literal>#define name value</literal></term>
264           <term><literal>#undef name</literal></term>
265           <listitem>
266             <para>Similar to <literal>#include</literal>. Note that
267             <literal>#includes</literal> and
268             <literal>#defines</literal> may be put in the same file
269             twice so they should not assume otherwise.</para>
270           </listitem>
271         </varlistentry>
272
273         <varlistentry>
274           <term><literal>#let name parameters = "definition"</literal></term>
275           <listitem>
276             <para>Defines a macro to be applied to the Haskell
277             source. Parameter names are comma-separated, not
278             inside parens. Such macro is invoked as other
279             <literal>#</literal>-constructs, starting with
280             <literal>#name</literal>. The definition will be
281             put in the C program inside parens as arguments of
282             <literal>printf</literal>. To refer to a parameter,
283             close the quote, put a parameter name and open the
284             quote again, to let C string literals concatenate.
285             Or use <literal>printf</literal>'s format directives.
286             Values of arguments must be given as strings, unless the
287             macro stringifies them itself using the C preprocessor's
288             <literal>#parameter</literal> syntax.</para>
289           </listitem>
290         </varlistentry>
291
292         <varlistentry>
293           <term><literal>#def C_definition</literal></term>
294           <listitem>
295             <para>The definition (of a function, variable, struct or
296             typedef) is written to the C file, and its prototype or
297             extern declaration to the C header. Inline functions are
298             handled correctly.  struct definitions and typedefs are
299             written to the C program too.  The
300             <literal>inline</literal>, <literal>struct</literal> or
301             <literal>typedef</literal> keyword must come just after
302             <literal>def</literal>.</para>
303           </listitem>
304         </varlistentry>
305
306         <varlistentry>
307           <term><literal>#if condition</literal></term>
308           <term><literal>#ifdef name</literal></term>
309           <term><literal>#ifndef name</literal></term>
310           <term><literal>#elif condition</literal></term>
311           <term><literal>#else</literal></term>
312           <term><literal>#endif</literal></term>
313           <term><literal>#error message</literal></term>
314           <listitem>
315             <para>Conditional compilation directives are passed
316             unmodified to the C program, C file, and C header. Putting
317             them in the C program means that appropriate parts of the
318             Haskell file will be skipped.</para>
319           </listitem>
320         </varlistentry>
321
322         <varlistentry>
323           <term><literal>#const C_expression</literal></term>
324           <listitem>
325             <para>The expression must be convertible to
326             <literal>long</literal> or <literal>unsigned
327             long</literal>.  Its value (literal or negated literal)
328             will be output.</para>
329           </listitem>
330         </varlistentry>
331
332         <varlistentry>
333           <term><literal>#const_str C_expression</literal></term>
334           <listitem>
335             <para>The expression must be convertible to const char
336             pointer.  Its value (string literal) will be output.</para>
337           </listitem>
338         </varlistentry>
339
340         <varlistentry>
341           <term><literal>#type C_type</literal></term>
342           <listitem>
343             <para>A Haskell equivalent of the C numeric type will be
344             output.  It will be one of
345             <literal>{Int,Word}{8,16,32,64}</literal>,
346             <literal>Float</literal>, <literal>Double</literal>,
347             <literal>LDouble</literal>.</para>
348           </listitem>
349         </varlistentry>
350
351         <varlistentry>
352           <term><literal>#peek struct_type, field</literal></term>
353           <listitem>
354             <para>A function that peeks a field of a C struct will be
355             output.  It will have the type 
356               <literal>Storable b => Ptr a -> IO b</literal>.  
357
358             The intention is that <literal>#peek</literal> and
359             <literal>#poke</literal> can be used for implementing the
360             operations of class <literal>Storable</literal> for a
361             given C struct (see <xref linkend="sec-Storable">).</para>
362           </listitem>
363         </varlistentry>
364
365         <varlistentry>
366           <term><literal>#poke struct_type, field</literal></term>
367           <listitem>
368             <para>Similarly for poke. It will have the type 
369               <literal>Storable b => Ptr a -> b -> IO ()</literal>.</para>
370           </listitem>
371         </varlistentry>
372
373         <varlistentry>
374           <term><literal>#ptr struct_type, field</literal></term>
375           <listitem>
376             <para>Makes a pointer to a field struct. It will have the type
377             <literal>Ptr a -> Ptr b</literal>.</para>
378           </listitem>
379         </varlistentry>
380       </variablelist>
381
382     </sect2>
383
384     <sect2>
385       <title>Custom constructs</title>
386
387       <para><literal>#const</literal>, <literal>#type</literal>,
388       <literal>#peek</literal>, <literal>#poke</literal> and
389       <literal>#ptr</literal> are not hardwired into the
390       <command>hsc2hs</command>, but are defined in a C template that is
391       included in the C program: <filename>template-hsc.h</filename>.
392       Custom constructs and templates can be used too. Any
393       <literal>#</literal>-construct with unknown key is expected to
394       be handled by a C template.</para>
395
396       <para>A C template should define a macro or function with name
397       prefixed by <literal>hsc_</literal> that handles the construct
398       by emitting the expansion to stdout. See
399       <filename>template-hsc.h</filename> for examples.</para>
400       
401       <para>Such macros can also be defined directly in the
402       source. They are useful for making a <literal>#let</literal>-like
403       macro whose expansion uses other <literal>#let</literal> macros.
404       Plain <literal>#let</literal> prepends <literal>hsc_</literal>
405       to the macro name and wraps the defininition in a
406       <literal>printf</literal> call.
407
408     </sect2>
409
410   </sect1>
411
412 </chapter>
413
414 <!-- Emacs stuff:
415      ;;; Local Variables: ***
416      ;;; mode: sgml ***
417      ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter") ***
418      ;;; End: ***
419  -->