Browse Source

Add semi-helpful readme

Getty Ritter 6 years ago
parent
commit
ab3c9e5f5b
1 changed files with 67 additions and 0 deletions
  1. 67 0
      README.md

+ 67 - 0
README.md

@@ -0,0 +1,67 @@
+**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.)
+
+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.
+
+# Example Usage
+
+Create a library `foo` that exposes two modules, `Data.Foo` and
+`Data.Bar`, and has a dependency on `bytestring`.
+
+```bash
+$ 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
+
+```bash
+$ charter quick haskat \
+    -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:
+
+```bash
+$ charter library make-it-so \
+    -m Web.Make.It.So
+    -a warp
+    -a wai
+    -b do-this
+    -b do-that
+    -b do-the-other
+```