2 <title>Other Haskell utility programs</title>
3 <indexterm><primary>utilities, Haskell</primary></indexterm>
5 <para>This section describes other program(s) which we distribute,
6 that help with the Great Haskell Programming Task.</para>
8 <!-- comment: hstags doesn't work anymore
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>
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>
19 <para>Rather than scratch your head, saying “Now where did
20 we define `foo'?”, you just do (in Emacs) <Literal>M-. foo
21 RET</Literal>, and You're There! Some people go wild over this
24 <para>GHC comes with a program <command>hstags</command>, which
25 build Emacs-able TAGS files. The invocation syntax is:</para>
28 hstags [GHC-options] file [files...]
31 <para>The best thing is just to feed it your GHC command-line
32 flags. A good Makefile entry might be:</para>
37 hstags $(GHC_FLAGS) *.lhs
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>
44 <para>Shortcomings: (1) 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) Data-constructor definitions don't get in. Go for the
48 corresponding type constructor instead.</para>
50 <para>Actually, GHC also comes with <command>etags</command>
51 [for C], and <Command>perltags</Command> [for You
52 Know What]. And—I cannot tell a lie—there is
53 Denis Howe's <Command>fptags</Command> [for Haskell,
54 etc.] in the <Filename>ghc/CONTRIB</Filename>
55 section…)</para>
61 <title>“Yacc for Haskell”: <command>happy</command></title>
63 <indexterm><primary>Happy</primary></indexterm>
64 <indexterm><primary>Yacc for Haskell</primary></indexterm>
65 <indexterm><primary>parser generator for Haskell</primary></indexterm>
67 <para>Andy Gill and Simon Marlow have written a parser-generator
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>
73 <para>You can get <Command>happy</Command> from <ulink
74 url="http://www.haskell.org/happy/">the Happy
75 Homepage</ulink>.</para>
77 <para><command>Happy</command> is at its shining best when
78 compiled by GHC.</para>
82 <!-- we don't distribute this anymore
84 <title>Pretty-printing Haskell: <Command>pphs</Command></title>
85 <indexterm><primary>pphs</primary></indexterm>
86 <indexterm><primary>pretty-printing Haskell code</primary></indexterm>
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—that sort of thing. It is good at lining up program
93 clauses and equals signs, things that are very tiresome to do by
96 <para>The code is distributed with GHC in
97 <Filename>ghc/CONTRIB/pphs</Filename>.</para>
102 <title>Writing Haskell interfaces to C code:
103 <command>hsc2hs</command></title>
104 <indexterm><primary><command>hsc2hs</command></primary>
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>
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>
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
126 <para>In the following, “Haskell file” is the main
127 output (usually a <literal>.hs</literal> file), “compiled
128 Haskell file” is the Haskell file after
129 <command>ghc</command> has compiled it to C (i.e. a
130 <literal>.hc</literal> file), “C program” is the
131 program that outputs the Haskell file, “C file” is the
132 optionally generated C file, and “C header” is its
136 <title>Command line syntax</title>
138 <para><command>hsc2hs</command> takes input files as arguments,
139 and flags that modify its behavior:</para>
143 <term><literal>-t FILE</literal> or
144 <literal>--template=FILE</literal></term>
146 <para>The template file (see below).</para>
151 <term><literal>-c PROG</literal> or
152 <literal>--cc=PROG</literal></term>
154 <para>The C compiler to use (default:
155 <command>ghc</command>)</para>
160 <term><literal>-l PROG</literal> or
161 <literal>--ld=PROG</literal></term>
163 <para>The linker to use (default:
164 <command>gcc</command>).</para>
169 <term><literal>-C FLAG</literal> or
170 <literal>--cflag=FLAG</literal></term>
172 <para>An extra flag to pass to the C compiler.</para>
177 <term><literal>-I DIR</literal></term>
179 <para>Passed to the C compiler.</para>
184 <term><literal>-L FLAG</literal> or
185 <literal>--lflag=FLAG</literal></term>
187 <para>An extra flag to pass to the linker.</para>
192 <term><literal>-i FILE</literal> or
193 <literal>--include=FILE</literal></term>
195 <para>As if the appropriate <literal>#include</literal>
196 directive was placed in the source.</para>
201 <term><literal>-D NAME[=VALUE]</literal> or
202 <literal>--define=NAME[=VALUE]</literal></term>
204 <para>As if the appropriate <literal>#define</literal>
205 directive was placed in the source.</para>
210 <term><literal>-o FILE</literal> or
211 <literal>--output=FILE</literal></term>
213 <para>Name of the Haskell file.</para>
218 <term><literal>--help</literal></term>
220 <para>Display a summary of the available flags.</para>
225 <term><literal>--version</literal></term>
227 <para>Output version information.</para>
232 <term><literal>--no-compile</literal></term>
234 <para>Stop after writing out the intermediate C program to disk.
235 The file name for the intermediate C program is the input file name
236 with <literal>.hsc</literal> replaced with <literal>_hsc_make.c</literal>.</para>
241 <para>The input file should end with .hsc. Output files by
242 default get names with the <literal>.hsc</literal> suffix
249 <entry><literal>.hs</literal></entry>
250 <entry>Haskell file</entry>
253 <entry><literal>_hsc.h</literal></entry>
254 <entry>C header</entry>
257 <entry><literal>_hsc.c</literal></entry>
258 <entry>C file</entry>
264 <para>The C program is compiled using the Haskell compiler. This
265 provides the include path to <filename>HsFFI.h</filename> which
266 is automatically included into the C program.</para>
269 <sect2><title>Input syntax</title>
271 <para>All special processing is triggered by
272 the <literal>#</literal> operator. To output
273 a literal <literal>#</literal>, write it twice:
274 <literal>##</literal>. Inside string literals and comments
275 <literal>#</literal> characters are not processed.</para>
277 <para>A <literal>#</literal> is followed by optional
278 spaces and tabs, an alphanumeric keyword that describes
279 the kind of processing, and its arguments. Arguments look
280 like C expressions separated by commas (they are not
281 written inside parens). They extend up to the nearest
282 unmatched <literal>)</literal>, <literal>]</literal> or
283 <literal>}</literal>, or to the end of line if it occurs outside
284 any <literal>() [] {} '' "" /**/</literal> and is not preceded
285 by a backslash. Backslash-newline pairs are stripped.</para>
287 <para>In addition <literal>#{stuff}</literal> is equivalent
288 to <literal>#stuff</literal> except that it's self-delimited
289 and thus needs not to be placed at the end of line or in some
292 <para>Meanings of specific keywords:</para>
297 <term><literal>#include <file.h></literal></term>
298 <term><literal>#include "file.h"</literal></term>
300 <para>The specified file gets included into the C program,
301 the compiled Haskell file, and the C header.
302 <literal><HsFFI.h></literal> is included
303 automatically.</para>
308 <term><literal>#define name</literal></term>
309 <term><literal>#define name value</literal></term>
310 <term><literal>#undef name</literal></term>
312 <para>Similar to <literal>#include</literal>. Note that
313 <literal>#includes</literal> and
314 <literal>#defines</literal> may be put in the same file
315 twice so they should not assume otherwise.</para>
320 <term><literal>#let name parameters = "definition"</literal></term>
322 <para>Defines a macro to be applied to the Haskell
323 source. Parameter names are comma-separated, not
324 inside parens. Such macro is invoked as other
325 <literal>#</literal>-constructs, starting with
326 <literal>#name</literal>. The definition will be
327 put in the C program inside parens as arguments of
328 <literal>printf</literal>. To refer to a parameter,
329 close the quote, put a parameter name and open the
330 quote again, to let C string literals concatenate.
331 Or use <literal>printf</literal>'s format directives.
332 Values of arguments must be given as strings, unless the
333 macro stringifies them itself using the C preprocessor's
334 <literal>#parameter</literal> syntax.</para>
339 <term><literal>#def C_definition</literal></term>
341 <para>The definition (of a function, variable, struct or
342 typedef) is written to the C file, and its prototype or
343 extern declaration to the C header. Inline functions are
344 handled correctly. struct definitions and typedefs are
345 written to the C program too. The
346 <literal>inline</literal>, <literal>struct</literal> or
347 <literal>typedef</literal> keyword must come just after
348 <literal>def</literal>.</para>
353 <term><literal>#if condition</literal></term>
354 <term><literal>#ifdef name</literal></term>
355 <term><literal>#ifndef name</literal></term>
356 <term><literal>#elif condition</literal></term>
357 <term><literal>#else</literal></term>
358 <term><literal>#endif</literal></term>
359 <term><literal>#error message</literal></term>
360 <term><literal>#warning message</literal></term>
362 <para>Conditional compilation directives are passed
363 unmodified to the C program, C file, and C header. Putting
364 them in the C program means that appropriate parts of the
365 Haskell file will be skipped.</para>
370 <term><literal>#const C_expression</literal></term>
372 <para>The expression must be convertible to
373 <literal>long</literal> or <literal>unsigned
374 long</literal>. Its value (literal or negated literal)
375 will be output.</para>
380 <term><literal>#const_str C_expression</literal></term>
382 <para>The expression must be convertible to const char
383 pointer. Its value (string literal) will be output.</para>
388 <term><literal>#type C_type</literal></term>
390 <para>A Haskell equivalent of the C numeric type will be
391 output. It will be one of
392 <literal>{Int,Word}{8,16,32,64}</literal>,
393 <literal>Float</literal>, <literal>Double</literal>,
394 <literal>LDouble</literal>.</para>
399 <term><literal>#peek struct_type, field</literal></term>
401 <para>A function that peeks a field of a C struct will be
402 output. It will have the type
403 <literal>Storable b => Ptr a -> IO b</literal>.
405 The intention is that <literal>#peek</literal> and
406 <literal>#poke</literal> can be used for implementing the
407 operations of class <literal>Storable</literal> for a
408 given C struct (see <xref linkend="sec-Storable">).</para>
413 <term><literal>#poke struct_type, field</literal></term>
415 <para>Similarly for poke. It will have the type
416 <literal>Storable b => Ptr a -> b -> IO ()</literal>.</para>
421 <term><literal>#ptr struct_type, field</literal></term>
423 <para>Makes a pointer to a field struct. It will have the type
424 <literal>Ptr a -> Ptr b</literal>.</para>
429 <term><literal>#enum type, constructor, value, value, ...</literal></term>
431 <para>A shortcut for multiple definitions which use
432 <literal>#const</literal>. Each <literal>value</literal>
433 is a name of a C integer constant, e.g. enumeration value.
434 The name will be translated to Haskell by making each
435 letter following an underscore uppercase, making all the rest
436 lowercase, and removing underscores. You can supply a different
437 translation by writing <literal>hs_name = c_value</literal>
438 instead of a <literal>value</literal>, in which case
439 <literal>c_value</literal> may be an arbitrary expression.
440 The <literal>hs_name</literal> will be defined as having the
441 specified <literal>type</literal>. Its definition is the specified
442 <literal>constructor</literal> (which in fact may be an expression
443 or be empty) applied to the appropriate integer value. You can
444 have multiple <literal>#enum</literal> definitions with the same
445 <literal>type</literal>; this construct does not emit the type
446 definition itself.</para>
454 <title>Custom constructs</title>
456 <para><literal>#const</literal>, <literal>#type</literal>,
457 <literal>#peek</literal>, <literal>#poke</literal> and
458 <literal>#ptr</literal> are not hardwired into the
459 <command>hsc2hs</command>, but are defined in a C template that is
460 included in the C program: <filename>template-hsc.h</filename>.
461 Custom constructs and templates can be used too. Any
462 <literal>#</literal>-construct with unknown key is expected to
463 be handled by a C template.</para>
465 <para>A C template should define a macro or function with name
466 prefixed by <literal>hsc_</literal> that handles the construct
467 by emitting the expansion to stdout. See
468 <filename>template-hsc.h</filename> for examples.</para>
470 <para>Such macros can also be defined directly in the
471 source. They are useful for making a <literal>#let</literal>-like
472 macro whose expansion uses other <literal>#let</literal> macros.
473 Plain <literal>#let</literal> prepends <literal>hsc_</literal>
474 to the macro name and wraps the defininition in a
475 <literal>printf</literal> call.</para>
484 ;;; Local Variables: ***
486 ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter") ***