2 title: "Advent of Code 2017"
6 Code to solve the [Advent of Code](http://adventofcode.com/2017/) puzzles. This year, I'm using the puzzles to develop my skills in [Haskell](https://wiki.haskell.org/Haskell).
8 [Learn you a Haskell](http://learnyouahaskell.com/chapters), [Introduction to Haskell 98](https://www.haskell.org/tutorial/index.html), and [Hackage](https://hackage.haskell.org/) are good resources.
10 The [Stack documentation](https://docs.haskellstack.org/en/stable/README/) and [How I Start: Haskell](http://howistart.org/posts/haskell/1/) are good sources of using the tools.
14 I'm using the basic Haskell Platform installation, togeher with `Stack` to manage the packages and dependencies (install with
16 $ sudo aptitude install haskell-platform haskell-stack
20 ## Creating the repository and project
21 Create the repository as normal: create the project in Gitolite, clone it, and insert the `.gitignore` and `README.md` files.
23 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.
25 ## Creating the first package
26 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`
29 stack new adventofcode1701 simple
32 This project will be demoted to being a package, but one that will hold the overall project.
34 Then create the top-level `stack.yaml` file to hold the overall project information.
40 Modify this top-level `stack.yaml` file as needed, such as adding the `ghc-options` stanza. You can then delete `adventofcode1701/stack.yaml`.
42 ## Creating subsequent packages
44 Each package needs a separate directory tree and a separate `.cabal` file.
46 To work on a project, `cd` into that project's directory.
54 stack build adventofcode1701
62 Run interactively with
64 stack ghci adventofcode1701:exe:advent01
69 stack build --executable-profiling --library-profiling --ghc-options="-fprof-auto -rtsopts" adventofcode1601
73 stack exec -- advent01 +RTS -p -hy
78 Install following the [IHaskell instructions](https://github.com/gibiansky/IHaskell).
80 To run, change into the package's directory (after modifying the `.cabal` file) and run it with
83 stack exec jupyter -- notebook
88 Build this readme file wth
90 pandoc -s README.md > README.html
93 (Using the [Modest style](https://github.com/markdowncss/modest).)