---
name: "c2hs"
section: "1"
platform: "linux"
package: "c2hs"
version: "0.28.8-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/c2hs"
---

# c2hs(1)

C-\>Haskell Interface Generator

## NAME

c2hs - C-\>Haskell Interface Generator

## SYNOPSIS

**c2hs** \[**OPTIONS**\]... *header-file* *binding-file*

## DESCRIPTION

This manual page briefly describes the **c2hs** command.  For more details, refer to the main documentation, which is available in various other formats, including SGML and HTML; see below.

## OPTIONS

The programs follow the usual GNU command line syntax, with long options starting with two dashes (\`-'). A summary of options are included below. For a complete description, see the other documentation.

**c2hs** accepts the following options:

- **-h, -?, --help**

  brief help

- **-v, --version**

  show version information

- **--numeric-version**

  show version number

- **-c** *CPP,* **--cpp=***CPP*

  use executable *CPP* to invoke C preprocessor

- **-C** CPPOPTS, **--cppopts=**CPPOPTS

  pass CPPOPTS to the C preprocessor

- **-o** *FILE,* **--output=***FILE*

  output result to *FILE* (should end in *.hs*)

- **-t** *PATH,* **--output-dir=***PATH*

  place generated files in PATH

- **-p PLATFORM, --platform=PLATFORM**

  platform to use for cross compilation

- **-k, --keep**

  keep pre-processed C header

- **-l, --copy-library**

  copy \`C2HS' library module to the current directory

- **-d** TYPE, **--dump=**TYPE

  dump internal information (for debugging), where TYPE is one of:

  - • **trace**

    trace compiler phases

  - • **genbind**

    trace binding generation

  - • **ctrav**

    trace C declaration traversal

  - • **chs**

    dump the binding file (adds *.dump* to the name)

*header-file* is the header file belonging to the marshalled library. It must end with suffix  *.h*.

*binding-file* is the corresponding Haskell binding file, which must end with suffix *.chs*.

*PLATFORM* The platform name can be one of: *x86\_64-linux*. *i686-linux*. *m68k-palmos*. This allows for cross-compilation, assuming the rest of your toolchain supports that. The default is the current host platform.

The most useful of these options is probably  **--cppopts** (or  **-C**). If the C header file needs any special options (like -D or -I) to go through the C pre-processor, here is the place to pass them.

## EXAMPLES

The easiest way to use the C-\>Haskell Interface Generator is via *Cabal.* Cabal knows about  *.chs* files and will run **c2hs** automatically, passing the appropriate flags.

When used directly,  **c2hs** is usually called as:

**c2hs** *lib.h Lib.chs*

where  *lib.h* is the header file and *Lib.chs* the Haskell binding module, which define the C- and Haskell-side interface, respectively.  If no errors occur, the result is a pure Haskell module *Lib.hs*, which implements the Haskell API of the library.

A more advanced call may look like this:

**c2hs** --cppopts=-I*/some/obscure/dir* --cppopts=-DEXTRA *lib.h Lib.chs*

Often,  *lib.h* will not be in the current directory, but in one of the header file directories.  Apart from the current directory, C-\>Haskell looks in two places for the header: first, in the standard include directory of the used system, this is usually */usr/include* and */usr/local/include*; and second, it will look in every directory that is mentioned in a  -I*DIR* option passed to the pre-processor via  **--cppopts**.

## CAVEATS

If you have more than one option that you want to give to the pre-processor, use multiple **--cppopts=** flags.

## SEE ALSO

User guide */usr/share/doc/c2hs-0.15.1/html/c2hs.html*

Home page *http://www.cse.unsw.edu.au/~chak/haskell/c2hs/*

## BUGS

Please report bugs and feature requests in the c2hs trac

*http://hackage.haskell.org/trac/c2hs/*

or to the C-\>Haskell mailing list *c2hs@haskell.org*

## COPYRIGHT

C-\>Haskell Version 0.15.1 Copyright (c) \[1999..2007\] Manuel M. T. Chakravarty \<chak@cse.unsw.edu.au\>

## AUTHOR

This manual page was mainly assembled from the original documentation.

It was written by Michael Weber \<michael.weber@post.rwth-aachen.de\> for the Debian GNU/Linux system (but may be used by others).
