Potential users beware! This is basically a glorified personal shell script (and in fact is literally a smarter Haskell reimplementation of what I used to do using shell scripts.) It's designed to do what I want, and very likely doesn't do what you want (or does it poorly or buggily.) You might want to look at hi, a very similar and much more full-featured tool!
The charter tool is a tool for setting up Haskell projects. It has three basic modes of operation which correspond to three kinds of projects:
charter quick foocreates a project called
foothat contains a single executable whose entry point is in
src/Main.hs. This is good for quick-and-dirty Haskell executables that need little extra scaffolding.
charter library foocreates a project called
foothat contains a library whose sources are in
charter executable foocreates a project called
foothat contains a binary whose entry point is in
foo/Main.hsas well as a library whose sources are in
src, and also adds a built-in
foodependency to the executable.
Some of the information needed to set up these projects is grabbed
from command-line tools, and in particular from
git (the author and
maintainer name and email) and from
date (the current year for
copyright information). Other pieces of information are commented out,
but can also be provided via command-line flags (such as the category,
synopsis, description, and license). Command-line flags can also add
extra binary targets, add modules to the library, or add dependencies.
Note that the flags are processed in-order and sometimes order will affect the output.
Create a library
foo that exposes two modules,
Data.Bar, and has a dependency on
$ charter library foo \ -m Data.Foo \ -m Data.Foo.Bar \ -a bytestring
Create a simple executable
cat that depends on
text, and has a
filled-in category and synopsis
$ charter quick haskcat \ -a text \ -s 'The Haskcat program' \ -d 'Probably a pure Haskell implementation of cat, I guess?'
Create a library
make-it-so which exposes the module
Web.Make.It.So and which depends on
wai, and then
create three executables as well:
$ charter library make-it-so \ -m Web.Make.It.So \ -a warp \ -a wai \ -b do-this \ -b do-that \ -b do-the-other