X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=README.html;h=58b7faf5fb3ced72624c6e226b7d913bee9839d3;hb=HEAD;hp=6f80db8e882bb84de24ad5ddd8cbb9eb2cda0bec;hpb=3a599e34c0ddccec3e5c5d20a11fad920e4628c9;p=advent-of-code-17.git diff --git a/README.html b/README.html index 6f80db8..58b7faf 100644 --- a/README.html +++ b/README.html @@ -14,35 +14,42 @@

Code to solve the Advent of Code puzzles. This year, I'm using the puzzles to develop my skills in Haskell.

Learn you a Haskell, Introduction to Haskell 98, and Hackage are good resources.

+

The Stack documentation and How I Start: Haskell are good sources of using the tools.

Toolchain

-

I'm using the basic Haskell Platform installation, togeher with Stack to manage the packages and dependencies (install with

+

I'm using the basic Haskell Platform installation, togeher with stack to manage the packages and dependencies (install with

$ sudo aptitude install haskell-platform haskell-stack

).

Creating the repository and project

Create the repository as normal: create the project in Gitolite, clone it, and insert the .gitignore and README.md files.

-

Within the project directory, there will be one package for each day. This will save time waiting for stack to check every executable before compiling what's changed. Each package needs a separate directory tree and a separate .cabal file.

-

Creating the first package

-

Then create the basic stack project with it. This will create a new directory. Note that this new directory name can't have a hyphen-delimited word that's just digits, so the initial project will have to be adventofcode1701

-
stack new adventofcode1701 simple
-

This project will be demoted to being a package, but one that will hold the overall project.

-

Then create the top-level stack.yaml file to hold the overall project information.

-
stack init
-

Modify this top-level stack.yaml file as needed, such as adding the ghc-options stanza. You can then delete adventofcode1701/stack.yaml.

-

Creating subsequent packages

-

Each package needs a separate directory tree and a separate .cabal file.

-

To work on a project, cd into that project's directory.

+

There's just one package, with the code in sub-directories of the src directory. Each day will generate one (or more) entries in the adventofcode17.cabal file.

+

Create the basic stack project. This will create a new directory. Note that this new directory name can't have a hyphen-delimited word that's just digits, so the project will have to be advent-of-code

+
stack new advent-of-code --bare simple
+

Modify the stack.yaml file as needed, such as adding the ghc-options stanza.

+

Creating subsequent days

+

Each day lives in a separate directory within the src directory. It will also need it's own stanza in advent-of-code.cabal.

Compile with

stack build

or

-
stack build adventofcode1701
+
stack build advent01

Run with

stack exec advent01

Run interactively with

-
stack ghci adventofcode1701:exe:advent01
+
stack ghci advent-of-code:exe:advent01

To profile, use

stack build --executable-profiling --library-profiling --ghc-options="-fprof-auto -rtsopts" adventofcode1601

then run with

stack exec -- advent01 +RTS -p -hy
+

Packages

+

Stack is using the 9.14-lts resolver for packages, so make sure you read the correct documentation for the packages included in it.

+

When you use a new package, use

+
stack solver
+

to see how the stack.yaml file needs to change, and

+
stack solver --update-yaml
+

to implement the changes.

+

IHaskell

+

Install following the IHaskell instructions.

+

Run it with

+
stack exec jupyter -- notebook

Readme

Build this readme file wth

pandoc -s README.md > README.html