gdritter repos charter / ab3c9e5
Add semi-helpful readme Getty Ritter 6 years ago
1 changed file(s) with 67 addition(s) and 0 deletion(s). Collapse all Expand all
1 **Potential users beware!** This is basically a glorified personal
2 shell script (and in fact is literally a smarter Haskell
3 reimplementation of what I used to do using shell scripts.) It's
4 designed to do what I want, and very likely doesn't do what you want
5 (or does it poorly or buggily.)
6
7 The *charter* tool is a tool for setting up Haskell projects. It has
8 three basic modes of operation which correspond to three kinds of
9 projects:
10
11 - `charter quick foo` creates a project called `foo` that contains a
12 single executable whose entry point is in `src/Main.hs`. This is
13 good for quick-and-dirty Haskell executables that need little extra
14 scaffolding.
15 - `charter library foo` creates a project called `foo` that
16 contains a library whose sources are in `src`.
17 - `charter executable foo` creates a project called `foo` that
18 contains a binary whose entry point is in `foo/Main.hs` as well as a
19 library whose sources are in `src`, and also adds a built-in `foo`
20 dependency to the executable.
21
22 Some of the information needed to set up these projects is grabbed
23 from command-line tools, and in particular from `git` (the author and
24 maintainer name and email) and from `date` (the current year for
25 copyright information). Other pieces of information are commented out,
26 but can also be provided via command-line flags (such as the category,
27 synopsis, description, and license). Command-line flags can also add
28 extra binary targets, add modules to the library, or add dependencies.
29
30 Note that the flags are processed in-order and sometimes order will
31 affect the output.
32
33 # Example Usage
34
35 Create a library `foo` that exposes two modules, `Data.Foo` and
36 `Data.Bar`, and has a dependency on `bytestring`.
37
38 ```bash
39 $ charter library foo \
40 -m Data.Foo \
41 -m Data.Foo.Bar \
42 -a bytestring
43 ```
44
45 Create a simple executable `cat` that depends on `text`, and has a
46 filled-in category and synopsis
47
48 ```bash
49 $ charter quick haskat \
50 -a text \
51 -s 'The Haskcat program'
52 -d 'Probably a pure Haskell implementation of cat, I guess?'
53 ```
54
55 Create a library `make-it-so` which exposes the module
56 `Web.Make.It.So` and which depends on `warp` and `wai`, and then
57 create three executables as well:
58
59 ```bash
60 $ charter library make-it-so \
61 -m Web.Make.It.So
62 -a warp
63 -a wai
64 -b do-this
65 -b do-that
66 -b do-the-other
67 ```