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 foo
creates a project called foo
that 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 foo
creates a project called foo
that
contains a library whose sources are in src
.charter executable foo
creates a project called foo
that
contains a binary whose entry point is in foo/Main.hs
as well as a
library whose sources are in src
, and also adds a built-in foo
dependency 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.Foo
and
Data.Bar
, and has a dependency on bytestring
.
$ 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 warp
and 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