-
- $body$
-
-
diff --git a/examples/feedblog/css/default.css b/examples/feedblog/css/default.css
deleted file mode 100644
index 9ed2b01..0000000
--- a/examples/feedblog/css/default.css
+++ /dev/null
@@ -1,17 +0,0 @@
-body {
- width: 600px;
- margin: 0px auto 0px auto;
-}
-
-div#navigation {
- text-align: center;
- border-bottom: 4px solid black;
-}
-
-div#navigation a {
- color: white;
- text-decoration: none;
- background-color: black;
- padding: 3px 10px 3px 10px;
- margin: 0px 10px 0px 10px;
-}
diff --git a/examples/feedblog/hakyll.hs b/examples/feedblog/hakyll.hs
deleted file mode 100644
index 4aa8ed9..0000000
--- a/examples/feedblog/hakyll.hs
+++ /dev/null
@@ -1,68 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-module Main where
-
-import Prelude hiding (id)
-import Control.Category (id)
-import Control.Arrow ((>>>), (***), arr)
-import Data.Monoid (mempty, mconcat)
-
-import Hakyll
-
-main :: IO ()
-main = hakyll $ do
- -- Compress CSS
- match "css/*" $ do
- route idRoute
- compile compressCssCompiler
-
- -- Render posts
- match "posts/*" $ do
- route $ setExtension ".html"
- compile $ pageCompiler
- >>> applyTemplateCompiler "templates/post.html"
- >>> applyTemplateCompiler "templates/default.html"
- >>> relativizeUrlsCompiler
-
- -- Render posts list
- match "posts.html" $ route idRoute
- create "posts.html" $ constA mempty
- >>> arr (setField "title" "All posts")
- >>> requireAllA "posts/*" addPostList
- >>> applyTemplateCompiler "templates/posts.html"
- >>> applyTemplateCompiler "templates/default.html"
- >>> relativizeUrlsCompiler
-
- -- Index
- match "index.html" $ route idRoute
- create "index.html" $ constA mempty
- >>> arr (setField "title" "Home")
- >>> requireAllA "posts/*" (id *** arr (take 3 . reverse . sortByBaseName) >>> addPostList)
- >>> applyTemplateCompiler "templates/index.html"
- >>> applyTemplateCompiler "templates/default.html"
- >>> relativizeUrlsCompiler
-
- -- Render RSS feed
- match "rss.xml" $ route idRoute
- create "rss.xml" $
- requireAll_ "posts/*" >>> renderRss feedConfiguration
-
- -- Read templates
- match "templates/*" $ compile templateCompiler
-
--- | Auxiliary compiler: generate a post list from a list of given posts, and
--- add it to the current page under @$posts@
---
-addPostList :: Compiler (Page String, [Page String]) (Page String)
-addPostList = setFieldA "posts" $
- arr (reverse . sortByBaseName)
- >>> require "templates/postitem.html" (\p t -> map (applyTemplate t) p)
- >>> arr mconcat
- >>> arr pageBody
-
-feedConfiguration :: FeedConfiguration
-feedConfiguration = FeedConfiguration
- { feedTitle = "SimpleBlog RSS feed."
- , feedDescription = "A simple demo of an RSS feed created with Hakyll."
- , feedAuthorName = "Jasper Van der Jeugt"
- , feedRoot = "http://example.com"
- }
diff --git a/examples/feedblog/posts/2009-11-05-a-first-post.markdown b/examples/feedblog/posts/2009-11-05-a-first-post.markdown
deleted file mode 100644
index 7351eb4..0000000
--- a/examples/feedblog/posts/2009-11-05-a-first-post.markdown
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: A first post
-author: Julius Caesar
-date: November 5, 2009
-description: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
----
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pretium leo
-adipiscing lectus iaculis lobortis. Vivamus scelerisque velit dignissim metus
-gravida sit amet dapibus ligula tempor. Quisque sit amet viverra nunc.
-Suspendisse cursus elementum ante, ut venenatis nisi dictum eu. Nulla diam
-ligula, eleifend in varius quis, malesuada a nibh. Vivamus consequat
-pellentesque erat non blandit. Nunc sit amet eros vel massa semper ullamcorper
-quis iaculis magna. Vestibulum ullamcorper urna sit amet est elementum
-pulvinar. Vestibulum consequat lacus ac quam hendrerit tincidunt. Praesent
-bibendum vehicula diam, nec sagittis risus tempus a. Nulla quis odio sit amet
-odio vehicula cursus ut id odio. Curabitur semper magna euismod magna mollis
-venenatis. Nunc eget eleifend velit. Mauris sed posuere sem. Fusce id nunc
-nisi, a aliquam orci. Suspendisse laoreet justo non enim laoreet eget consequat
-velit porttitor. Aenean faucibus sodales metus at tincidunt. Donec vestibulum
-leo pulvinar erat auctor ac ultrices massa euismod. Phasellus blandit cursus
-magna, eget lacinia mi lobortis sed. Suspendisse ultricies enim ligula, vel
-scelerisque mauris.
diff --git a/examples/feedblog/posts/2009-11-10-another-post.markdown b/examples/feedblog/posts/2009-11-10-another-post.markdown
deleted file mode 100644
index c4e07b6..0000000
--- a/examples/feedblog/posts/2009-11-10-another-post.markdown
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Another post
-author: Marcus Tullius Cicero
-date: November 10, 2009
-description: Vestibulum in ultrices urna. Etiam tempor enim dui, nec malesuada elit.
----
-
-Vestibulum in ultrices urna. Etiam tempor enim dui, nec malesuada elit. Donec
-tempor ligula et quam volutpat quis fermentum eros congue. Sed ut pulvinar sem.
-Sed aliquam ipsum id purus sollicitudin vulputate. Cras et mauris dui, vel
-hendrerit leo. Ut metus ipsum, fermentum ac malesuada id, tempus pharetra quam.
-Donec diam felis, consequat ac scelerisque cursus, gravida non lectus. Sed
-faucibus elit dapibus diam elementum id varius nisi tristique. Proin consequat
-faucibus neque in aliquam. Vestibulum ligula odio, pulvinar vel hendrerit
-vitae, egestas ut nibh. Praesent ut velit elit, in consequat dolor. Praesent
-sem enim, commodo in gravida sed, adipiscing vel eros. Lorem ipsum dolor sit
-amet, consectetur adipiscing elit. Proin non aliquam nunc.
diff --git a/examples/feedblog/posts/2009-11-28-a-third-post.markdown b/examples/feedblog/posts/2009-11-28-a-third-post.markdown
deleted file mode 100644
index b7df45d..0000000
--- a/examples/feedblog/posts/2009-11-28-a-third-post.markdown
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: A third post
-author: Publius Ovidius Naso
-date: November 28, 2009
-description: Pellentesque tempor blandit elit, vel ultricies arcu congue egestas.
----
-
-Pellentesque tempor blandit elit, vel ultricies arcu congue egestas. Fusce
-vitae rutrum nisl. Fusce id mauris libero, a venenatis tellus. Fusce iaculis,
-lorem et ornare molestie, mauris risus mollis nisi, non fermentum lacus lacus
-sit amet ipsum. Praesent lobortis ullamcorper dolor, eget convallis ligula
-dignissim a. Suspendisse nulla nisi, congue et pharetra vel, convallis non
-libero. Ut a nulla ipsum. Phasellus cursus velit id neque viverra ut
-pellentesque justo posuere. Curabitur laoreet enim et velit tempor consectetur.
-Donec eu pretium urna. Suspendisse vitae nisi at metus vestibulum aliquam in
-sit amet nisl. Donec convallis lacinia odio, vestibulum molestie nunc feugiat
-a. Suspendisse vehicula, sapien id aliquet consectetur, sem sapien ullamcorper
-arcu, scelerisque porttitor elit ipsum posuere ligula. Nulla at velit eu metus
-tincidunt auctor ut sit amet enim. Donec placerat dapibus nisi id facilisis.
-Maecenas pellentesque pulvinar auctor. Curabitur gravida quam sit amet purus
-consectetur blandit.
diff --git a/examples/feedblog/posts/2009-12-04-this-blog-aint-dead.markdown b/examples/feedblog/posts/2009-12-04-this-blog-aint-dead.markdown
deleted file mode 100644
index 17de991..0000000
--- a/examples/feedblog/posts/2009-12-04-this-blog-aint-dead.markdown
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: This blog ain't dead
-author: Marcus Antonius
-date: December 4, 2009
-description: Etiam non felis aliquet tellus dictum vestibulum.
----
-
-Etiam non felis aliquet tellus dictum vestibulum. Aliquam accumsan mauris non
-lacus ultricies nec lacinia enim rhoncus. Curabitur vel tortor massa, elementum
-tincidunt elit. Maecenas venenatis luctus arcu ut ullamcorper. Donec interdum
-dolor eu enim tristique vel vehicula risus mollis. Nunc nec tortor quam. Nulla
-a mauris arcu. Phasellus venenatis tortor vel odio tincidunt consequat. Integer
-venenatis nibh vitae lectus laoreet eu feugiat nunc pretium. Integer nec turpis
-metus, in fermentum lorem.
diff --git a/examples/feedblog/posts/2009-12-23-almost-christmas.markdown b/examples/feedblog/posts/2009-12-23-almost-christmas.markdown
deleted file mode 100644
index 214f147..0000000
--- a/examples/feedblog/posts/2009-12-23-almost-christmas.markdown
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Almost Christmas!
-author: Publius Vergilius Maro
-date: December 23, 2009
-description: Morbi tincidunt eleifend ante, eu gravida ante rutrum vel.
----
-
-Morbi tincidunt eleifend ante, eu gravida ante rutrum vel. Nunc bibendum nulla
-tellus, eget egestas sapien. Nam rhoncus interdum libero, eget congue orci
-imperdiet eu. Quisque pellentesque fringilla urna, ac venenatis ante ultricies
-et. Pellentesque habitant morbi tristique senectus et netus et malesuada fames
-ac turpis egestas. Mauris eleifend sagittis ultrices. Quisque ultrices accumsan
-nisl, sed pellentesque metus porta vitae. Nulla facilisi. In et nibh tincidunt
-mi volutpat pellentesque vitae nec sapien. Integer massa ipsum, pellentesque in
-elementum at, cursus sit amet diam.
diff --git a/examples/feedblog/templates/default.html b/examples/feedblog/templates/default.html
deleted file mode 100644
index 7aac5d5..0000000
--- a/examples/feedblog/templates/default.html
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
- SimpleBlog - $title$
-
-
-
-
-
diff --git a/examples/hakyll/about.markdown b/examples/hakyll/about.markdown
deleted file mode 100644
index 108663b..0000000
--- a/examples/hakyll/about.markdown
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: About
----
-
-## Code
-
-The code for Hakyll is freely available on
-[github](http://github.com/jaspervdj/Hakyll/). Patches and suggestions are
-always very welcome.
-
-## Inspiration
-
-Hakyll is not the only static site generator out there. It was inspired by the
-following awesome projects:
-
-- [yst](http://github.com/jgm/yst)
-- [nanoc](http://nanoc.stoneship.org/)
-- [Jekyll](http://jekyllrb.com/)
-
-## License
-
-Hakyll is available under a BSD license. Note, however, that pandoc is
-released under a GPL license. Since you'll probably use Hakyll with pandoc,
-you will have to license your code under a GPL-compatible license.
-
-## Authors
-
-Hakyll was originally written by [Jasper Van der Jeugt](http://jaspervdj.be),
-who still maintains the package. Contributors:
-
-- [seschwar](http://github.com/seschwar)
-- [JD Marble](http://github.com/jdmarble)
-- [sargon](http://github.com/sargon)
-- [Paolo Veronelli](http://github.com/paolino)
-- [Benedict Eastaugh](http://extralogical.net/)
-- [Nicolas Wu](http://zenzike.com/)
diff --git a/examples/hakyll/changelog.markdown b/examples/hakyll/changelog.markdown
deleted file mode 100644
index 9c6c2cf..0000000
--- a/examples/hakyll/changelog.markdown
+++ /dev/null
@@ -1,137 +0,0 @@
----
-title: Changelog
----
-
-## Hakyll 3.1.1
-
-- Allow `group` in rules DSL
-
-## Hakyll 3.1
-
-- New `match` function in rules DSL
-- More expressive `Pattern`s
-
-## Hakyll 3
-
-- Complete rewrite
-
-## Hakyll 2.4.1
-
-- Add a number of utility functions
-- Fix bug in `enableIndexUrl` mode
-
-## Hakyll 2.4
-
-- Arrow based interface to pandoc
-- Easier custom fields
-
-## Hakyll 2.3
-
-- Ability to choose between preview modes.
-- Simple static configuration available.
-- Support hamlet templates.
-
-## Hakyll 2.2.2
-
-- Cabal dependency fixes.
-
-## Hakyll 2.2.1
-
-- Allow custom time locale for `renderDate`.
-- Render RSS feeds with `CDATA` sections.
-
-## Hakyll 2.2
-
-- Allow markup languages in templates.
-
-## Hakyll 2.1.1
-
-- Fix issues in autocompilation/preview mode.
-
-## Hakyll 2.1
-
-May 21, 2010
-
-- Expose pandoc options to HakyllConfiguration.
-- Allow dashes in pages.
-- Some typo's and bugs fixed.
-
-## Hakyll 2.0
-
-March 31, 2010
-
-- Rewrite of the API to a clean, Arrow based API.
-- Added built-in support for RSS and Atom.
-- Added more documentation.
-- Added pagination.
-- Many bugfixes.
-
-## Hakyll 1.4
-
-February 17, 2010
-
-- Added an autocompilation feature.
-- Support for index URL's (`enableIndexUrl`).
-
-## Hakyll 1.3
-
-January 30, 2010
-
-- Added categories in addition to tags.
-- Added `createListing` and `createListingWith` function for a more high-level
- way to create listings.
-
-## Hakyll 1.2
-
-January 27, 2010
-
-- `Data.Binary` is now used for serialization.
-- Rewrite of the caching system.
-- Specialized data structure for templates.
-- Caching of pages and templates.
-
-## Hakyll 1.1
-
-January 19, 2010
-
-- Switched to a custom `Hakyll` monad stack instead of the `IO` monad.
-- Page sections.
-- Combining renderables.
-- `renderAndConcat` can now use multiple templates.
-
-## Hakyll 1.0
-
-January 14, 2009
-
-- First stable release.
-- Custom templating system.
-- Added `$root` key for relative URL's.
-
-## Hakyll 0.4
-
-January 8, 2010
-
-- Added examples.
-- Added `ContextManipulation` type.
-
-## Hakyll 0.3
-
-December 28, 2009
-
-- Added a general `directory` function.
-- Added CSS compression.
-- Added tag support.
-- Added a simple HTTP server for testing purposes.
-
-## Hakyll 0.2
-
-December 16, 2010
-
-- Abstracted `Renderable` type.
-- Added simple caching and dependency checking.
-
-## Hakyll 0.1
-
-December 5, 2009
-
-- Initial release.
diff --git a/examples/hakyll/css/default.css b/examples/hakyll/css/default.css
deleted file mode 100644
index 06f664c..0000000
--- a/examples/hakyll/css/default.css
+++ /dev/null
@@ -1,118 +0,0 @@
-html {
- padding: 0px;
- margin: 0px;
- background-color: white;
- color: black;
- font-family: sans-serif;
- line-height: 160%;
-}
-
-body {
- padding: 0px 0px 60px 0px;
- margin: 0px;
-}
-
-div#header {
- height: 32px;
- padding: 20px 0px 20px 60px;
-}
-
-div#header img {
- display: inline;
- vertical-align: middle;
-}
-
-div#header h1 {
- padding-left: 10px;
- display: inline;
- text-transform: uppercase;
- vertical-align: middle;
-}
-
-div#main {
- margin: 0px auto 0px auto;
- width: 860px;
-}
-
-div#sidebar {
- margin-right: 30px;
- width: 160px;
- float: left;
- text-align: right;
-}
-
-div#sidebar a {
- display: block;
- font-size: 110%;
- text-decoration: none;
- margin-bottom: 10px;
- text-transform: uppercase;
-}
-
-div#content {
- width: 670px;
- float: right;
-}
-
-div#footer {
- padding-top: 30px;
- clear: both;
- font-size: 90%;
- text-align: center;
-}
-
-a {
- color: black;
-}
-
-h2 {
- font-size: 120%;
- text-transform: uppercase;
-}
-
-h3 {
- font-size: 100%;
- text-transform: uppercase;
-}
-
-h1 a, h2 a, h3 a {
- text-decoration: none;
-}
-
-div.column {
- width: 50%;
- float: left;
-}
-
-div.column p {
- padding-right: 15px;
-}
-
-img {
- display: block;
- margin: 10px auto 10px auto;
- border: none;
-}
-
-ul {
- list-style-type: square;
- padding-left: 1em;
- margin-left: 1em;
-}
-
-code {
- background-color: rgb(250, 250, 250);
- border: 1px solid rgb(200, 200, 200);
- padding-left: 4px;
- padding-right: 4px;
-}
-
-pre code {
- display: block;
- padding: 8px;
- margin-bottom: 2em;
-}
-
-p.caption {
- display: none;
-}
diff --git a/examples/hakyll/css/syntax.css b/examples/hakyll/css/syntax.css
deleted file mode 100644
index 1aed859..0000000
--- a/examples/hakyll/css/syntax.css
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Generated by pandoc. */
-table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode, table.sourceCode pre
- { margin: 0; padding: 0; border: 0; vertical-align: baseline; border: none; }
-td.lineNumbers { border-right: 1px solid #AAAAAA; text-align: right; color: #AAAAAA; padding-right: 5px; padding-left: 5px; }
-td.sourceCode { padding-left: 5px; }
-pre.sourceCode span.kw { color: #007020; font-weight: bold; }
-pre.sourceCode span.dt { color: #902000; }
-pre.sourceCode span.dv { color: #40a070; }
-pre.sourceCode span.bn { color: #40a070; }
-pre.sourceCode span.fl { color: #40a070; }
-pre.sourceCode span.ch { color: #4070a0; }
-pre.sourceCode span.st { color: #4070a0; }
-pre.sourceCode span.co { color: #60a0b0; font-style: italic; }
-pre.sourceCode span.ot { color: #007020; }
-pre.sourceCode span.al { color: red; font-weight: bold; }
-pre.sourceCode span.fu { color: #06287e; }
-pre.sourceCode span.re { }
-pre.sourceCode span.er { color: red; font-weight: bold; }
diff --git a/examples/hakyll/examples.markdown b/examples/hakyll/examples.markdown
deleted file mode 100644
index 453a22e..0000000
--- a/examples/hakyll/examples.markdown
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Examples
----
-
-## Simple examples
-
-A number of simple examples are available in the GitHub repository. They can be
-found [here](https://github.com/jaspervdj/hakyll/tree/master/examples). The
-README located in that directory explains which example does what.
-
-## People using Hakyll
-
-A lot of sites running Hakyll also publish the source code. This is a very
-interesting resource to learn from as well. If you're using Hakyll for your
-site, and the source code is available, please notify me so I can add you to
-this list. This list has no particular ordering.
-
-- ,
- [source](https://github.com/jaspervdj/jaspervdj)
-- ,
- [source](https://github.com/altercation/ethanschoonover.com)
-- ,
- [source](https://github.com/beastaugh/extralogical.net)
-- ,
- [source](https://bitbucket.org/paul_r/blog-de-demotera)
-- ,
- [source](http://patch-tag.com/r/byorgey/diagrams-doc/snapshot/current/content/pretty/web/)
diff --git a/examples/hakyll/examples/brochure.zip b/examples/hakyll/examples/brochure.zip
deleted file mode 100644
index cfbe052..0000000
Binary files a/examples/hakyll/examples/brochure.zip and /dev/null differ
diff --git a/examples/hakyll/examples/feedblog.zip b/examples/hakyll/examples/feedblog.zip
deleted file mode 100644
index 0adaf1e..0000000
Binary files a/examples/hakyll/examples/feedblog.zip and /dev/null differ
diff --git a/examples/hakyll/examples/morepages.zip b/examples/hakyll/examples/morepages.zip
deleted file mode 100644
index 617e0f6..0000000
Binary files a/examples/hakyll/examples/morepages.zip and /dev/null differ
diff --git a/examples/hakyll/examples/simpleblog.zip b/examples/hakyll/examples/simpleblog.zip
deleted file mode 100644
index a67f362..0000000
Binary files a/examples/hakyll/examples/simpleblog.zip and /dev/null differ
diff --git a/examples/hakyll/examples/tagblog.zip b/examples/hakyll/examples/tagblog.zip
deleted file mode 100644
index d758225..0000000
Binary files a/examples/hakyll/examples/tagblog.zip and /dev/null differ
diff --git a/examples/hakyll/hakyll.hs b/examples/hakyll/hakyll.hs
deleted file mode 100644
index df92ddd..0000000
--- a/examples/hakyll/hakyll.hs
+++ /dev/null
@@ -1,53 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-import Hakyll
-import Control.Monad (forM_)
-import Control.Arrow ((>>>), arr)
-import Text.Pandoc
-
-main :: IO ()
-main = hakyll $ do
- match "css/*" $ do
- route idRoute
- compile compressCssCompiler
-
- -- Static directories
- forM_ ["images/*", "examples/*", "reference/**"] $ \f -> match f $ do
- route idRoute
- compile copyFileCompiler
-
- -- Pages
- forM_ pages $ \p -> match p $ do
- route $ setExtension "html"
- compile $ pageCompiler
- >>> requireA "sidebar.markdown" (setFieldA "sidebar" $ arr pageBody)
- >>> applyTemplateCompiler "templates/default.html"
- >>> relativizeUrlsCompiler
-
- -- Tutorial
- match "tutorial.markdown" $ do
- route $ setExtension "html"
- compile $ readPageCompiler
- >>> pageRenderPandocWith defaultHakyllParserState withToc
- >>> requireA "sidebar.markdown" (setFieldA "sidebar" $ arr pageBody)
- >>> applyTemplateCompiler "templates/default.html"
- >>> relativizeUrlsCompiler
-
- -- Sidebar
- match "sidebar.markdown" $ compile pageCompiler
-
- -- Templates
- match "templates/*" $ compile templateCompiler
- where
- withToc = defaultHakyllWriterOptions
- { writerTableOfContents = True
- , writerTemplate = "
Table of contents
\n$toc$\n$body$"
- , writerStandalone = True
- }
-
- pages = [ "about.markdown"
- , "changelog.markdown"
- , "examples.markdown"
- , "index.markdown"
- , "philosophy.markdown"
- , "reference.markdown"
- ]
diff --git a/examples/hakyll/images/brochure-files.png b/examples/hakyll/images/brochure-files.png
deleted file mode 100644
index 41af36e..0000000
Binary files a/examples/hakyll/images/brochure-files.png and /dev/null differ
diff --git a/examples/hakyll/images/hakyll-system-1.png b/examples/hakyll/images/hakyll-system-1.png
deleted file mode 100644
index 69e850c..0000000
Binary files a/examples/hakyll/images/hakyll-system-1.png and /dev/null differ
diff --git a/examples/hakyll/images/hakyll-system-2.png b/examples/hakyll/images/hakyll-system-2.png
deleted file mode 100644
index eb424a9..0000000
Binary files a/examples/hakyll/images/hakyll-system-2.png and /dev/null differ
diff --git a/examples/hakyll/images/hakyll-system-3.png b/examples/hakyll/images/hakyll-system-3.png
deleted file mode 100644
index cdffe2d..0000000
Binary files a/examples/hakyll/images/hakyll-system-3.png and /dev/null differ
diff --git a/examples/hakyll/images/lambda.png b/examples/hakyll/images/lambda.png
deleted file mode 100644
index fbf34a8..0000000
Binary files a/examples/hakyll/images/lambda.png and /dev/null differ
diff --git a/examples/hakyll/index.markdown b/examples/hakyll/index.markdown
deleted file mode 100644
index ee44cf3..0000000
--- a/examples/hakyll/index.markdown
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: Home
----
-
-## Overview
-
-Hakyll is a [Haskell](http://haskell.org) library for generating static sites,
-mostly aimed at small-to-medium sites and personal blogs. It is written in a
-very configurable way and uses an [xmonad](http://xmonad.org)-like DSL for
-configuration.
-
-Integration with [pandoc](http://johnmacfarlane.net/pandoc/) gives us markdown
-and TeX support, including syntax highlighting and other goodies.
-
-## The Hakyll System
-
-### Write your content in whatever format you prefer
-
-
-
-### Create compilation rules in a Haskell EDSL
-
-
-
-### Compile it to HTML and upload it!
-
-
-
-## Hakyll 3
-
-Hakyll 3 has been released, and it can be installed by running
-`cabal install hakyll`. For a limited time (but as long as is necessary) you can
-access the old site and documentation [here](/hakyll2).
-
-## Getting Started
-
-You can get the latest version from hackage using `cabal install hakyll`. Then,
-you can:
-
-- read the [tutorial](/tutorial.html);
-- mail the [google discussion group](http://groups.google.com/group/hakyll);
-- ask questions on the IRC channel: `#hakyll` on
- [freenode](http://freenode.net/).
diff --git a/examples/hakyll/philosophy.markdown b/examples/hakyll/philosophy.markdown
deleted file mode 100644
index 07a20c3..0000000
--- a/examples/hakyll/philosophy.markdown
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Philosophy
----
-
-## Small-to-medium sites
-
-Hakyll was written to be used for small-to-medium sites. You can do some
-advanced things with it, but don't use it to build a big online shop.
-
-## Hakyll.hs
-
-It should be possible to put all configuration in one file, so data and
-configuration can be strictly separated. In addition, we think this file should
-never exceed a 100 lines of code.
-
-## High-level
-
-Hakyll tries to provide as many high-level functions as possible for common
-tasks, while the lower-level functions should also be accessible. If you think
-you're writing something that can be used for many sites, please send a patch,
-or your `hakyll.hs`, and we will see what we can do.
-
-## Well-documented
-
-A key to being easy-to-use is documentation. That's why we try to provide as
-many working examples as possible. If you ever create a site using hakyll,
-please consider open-sourcing it, as people might be able to learn from your
-code.
diff --git a/examples/hakyll/reference.markdown b/examples/hakyll/reference.markdown
deleted file mode 100644
index 9b4d9e4..0000000
--- a/examples/hakyll/reference.markdown
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: Reference
----
-
-## Reference
-
-We keep a copy of the reference of the latest stable version here. This
-reference is automatically generated by
-[Haddock](http://www.haskell.org/haddock/). You can
-[find it here](reference/index.html).
diff --git a/examples/hakyll/sidebar.markdown b/examples/hakyll/sidebar.markdown
deleted file mode 100644
index 8396c75..0000000
--- a/examples/hakyll/sidebar.markdown
+++ /dev/null
@@ -1,9 +0,0 @@
-## Navigation
-
-[home](/index.html)
-[philosophy](/philosophy.html)
-[about](/about.html)
-[tutorial](/tutorial.html)
-[examples](/examples.html)
-[reference](/reference.html)
-[changelog](/changelog.html)
diff --git a/examples/hakyll/templates/default.html b/examples/hakyll/templates/default.html
deleted file mode 100644
index 040292c..0000000
--- a/examples/hakyll/templates/default.html
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
- Hakyll - $title$
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Hakyll is an open source project, and one of the hardest parts is writing
-correct, up-to-date, and understandable documentation. Therefore, the
-authors would really appreciate it if you would
-give some feedback about
-the tutorials, and especially report errors or difficulties you encountered.
-Thanks!
diff --git a/examples/hakyll/templates/tutorialitem.html b/examples/hakyll/templates/tutorialitem.html
deleted file mode 100644
index 01fb298..0000000
--- a/examples/hakyll/templates/tutorialitem.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/examples/hakyll/tutorial.markdown b/examples/hakyll/tutorial.markdown
deleted file mode 100644
index 920249d..0000000
--- a/examples/hakyll/tutorial.markdown
+++ /dev/null
@@ -1,351 +0,0 @@
----
-title: Tutorial
----
-
-Why static websites?
---------------------
-
-Modern web frameworks make it easy to create huge dynamic websites. Why would
-anyone still care about a static website?
-
-- Static websites are fast, because it's simply files served directly from the
- hard disk.
-- Static websites are secure. Nobody has ever found an SQL injection in static
- pages.
-- Static websites are easy to deploy. Just copy them to your webhost using
- (S)FTP/rsync/scp and you are done. They work on all webhosts: no CGI or extra
- modules needed for the web server.
-
-Why Hakyll?
------------
-
-Hakyll is a [Haskell] library meant for creating small-to-medium sized static
-websites. It is a powerful publishing tool, precisely because of the power of
-Haskell. By using the awesome [pandoc] library, it is able to create your
-website from a large variety of input formats.
-
-[Haskell]: http://haskell.org/
-[pandoc]: http://johnmacfarlane.net/pandoc/
-
-Features include:
-
-- easy templating system;
-- a simple HTTP server for previewing and compiling your website on the go;
-- powerful syntax highlighting;
-- modules for common items such as tags and feeds;
-- easily extensible.
-
-Let's get started!
-------------------
-
-We're going to discuss a small brochure site to start with. You can find all
-code and files necessary to build this site [right here](/examples/brochure.zip)
--- feel free to look at them as we go trough the tutorial, in fact, it might be
-very learnful to have a closer look at the files as we discuss them. There's a
-number of files we will use:
-
- about.rst A simple page written in RST format
- code.lhs Another page with some code (which can be highlighted)
- css Directory for CSS files
- |- default.css The main CSS file
- \- syntax.css CSS file for code syntax highlighting
- hakyll.hs Our code to generate the site
- images Directory for images
- \- haskell-logo.png The logo of my favorite programming language
- index.markdown A simple page in markdown format
- templates Directory for templates
- \- default.html The main template for the site
-
-By default, hakyll will compile everything to the `_site` directory. We can try
-this like this:
-
- [jasper@phoenix] ghc --make hakyll.hs
- [jasper@phoenix] ./hakyll build
-
-Instead of using `build`, we can also use `preview`, which will fire up a
-webserver serving the `_site` directory, so have a look!
-
-All files have been compiled, and their output has been placed in the `_site`
-directory as illustrated in this diagram:
-
-
-
-No magic is involved at all -- we will precisely study how and why our items are
-compiled like that. All of this is specified in the `hakyll.hs` file.
-
-### Images
-
-Let's start of with the `images/haskell-logo.png` file, because the processing
-of this file is very simple: it is simply copied to the output directory. Let's
-look at the relevant lines in the `hakyll.hs` file:
-
-~~~~~{.haskell}
-match "images/*" $ do
- route idRoute
- compile copyFileCompiler
-~~~~~
-
-The first line specifies we will describe the process for compiling everything
-in the `images/` folder: hakyll uses globs for this [^pattern].
-
-[^pattern]: A little caveat is that these globs are not `String`s but
- `Pattern`s, so you need the `OverloadedStrings` extension.
-
-We can see two simple rules next: [route] and [compile].
-
-- [route] determines how the input file(s) get mapped to the output files.
- [route] only deals with file names -- not with the actual content!
-- [compile], on the other hand, determines how the file content is processed.
-
-[route]: /reference/Hakyll-Core-Rules.html#v:route
-[compile]: /reference/Hakyll-Core-Rules.html#v:compile
-
-In this case, we select the [idRoute]: which means the file name will be kept
-the same (`_site` will always be prepended automatically). This explains the
-name of [idRoute]: much like the `id` function in Haskell, it also maps values
-to themselves.
-
-[idRoute]: /reference/Hakyll-Core-Routes.html#v:idRoute
-
-For our compiler, we use [copyFileCompiler], meaning that we don't process the
-content at all, we just copy the file.
-
-[copyFileCompiler]: /reference/Hakyll-Core-Writable-CopyFile.html#v:copyFileCompiler
-
-### CSS
-
-If we look at how the two CSS files are processed, we see something which looks
-very familiar:
-
-~~~~~{.haskell}
-match "css/*" $ do
- route idRoute
- compile compressCssCompiler
-~~~~~
-
-Indeed, the only difference with the images is that have now chosen for
-[compressCssCompiler] -- a compiler which *does* process the content. Let's have
-a quick look at the type of [compressCssCompiler]:
-
-[compressCssCompiler]: /reference/Hakyll-Web-CompressCss.html#v:compressCssCompiler
-
-~~~~~{.haskell}
-compressCssCompiler :: Compiler Resource String
-~~~~~
-
-Intuitively, we can see this as a process which takes a `Resource` and produces
-a `String`.
-
-- A `Resource` is simply the Hakyll representation of an item -- usually just a
- file on the disk.
-- The produced string is the processed CSS.
-
-We can wonder what Hakyll does with the resulting `String`. Well, it simply
-writes this to the file specified in the `route`! As you can see, routes and
-compilers work together to produce your site.
-
-### Templates
-
-Next, we can see that the templates are compiled:
-
-~~~~~{.haskell}
-match "templates/*" $ compile templateCompiler
-~~~~~
-
-Let's start with the basics: what is a template? An example template gives us a
-good impression:
-
-~~~~~
-
-
- Hakyll Example - $title$
-
-
-
$title$
-
- $body$
-
-
-~~~~~
-
-A template is a text file to lay our some content. The content it lays out is
-called a page -- we'll see that in the next section. The syntax for templates is
-intentionally very simplistic. You can bind some content by referencing the name
-of the content *field* by using `$field$`, and that's it.
-
-You might have noticed how we specify a compiler (`compile`), but we don't set
-any `route`. Why is this?
-
-Precisely because we don't want to our template to end up anywhere in our site
-directory! We want to use it to lay out other items -- so we need to load
-(compile) it, but we don't want to give it a real destination.
-
-By using the `templates/*` pattern, we compile all templates in one go.
-
-### Pages
-
-The code for pages looks suspiciously more complicated:
-
-~~~~~~{.haskell}
-match (list ["about.rst", "index.markdown", "code.lhs"]) $ do
- route $ setExtension "html"
- compile $ pageCompiler
- >>> applyTemplateCompiler "templates/default.html"
- >>> relativizeUrlsCompiler
-~~~~~~
-
-But we'll see shortly that this actually fairly straightforward. Let's begin by
-exploring what a *page* is.
-
-~~~~~~
----
-title: Home
-author: Jasper
----
-
-So, I decided to create a site using Hakyll and...
-~~~~~~
-
-A page consists of two parts: a body, and metadata. As you can see above, the
-syntax is not hard. The metadata part is completely optional, this is the same
-page without metadata:
-
-~~~~~~
-So, I decided to create a site using Hakyll and...
-~~~~~~
-
-Hakyll supports a number of formats for the page body. Markdown, HTML and RST
-are probably the most common. Hakyll will automatically guess the right format
-if you use the right extension for your page.
-
-~~~~~~{.haskell}
-match (list ["about.rst", "index.markdown", "code.lhs"]) $ do
-~~~~~~
-
-We see a more complicated pattern here. Some sets of files cannot be described
-easily by just one pattern, and here the [list] function can help us out. In
-this case, we have three specific pages we want to compile.
-
-[list]: /reference/Hakyll-Core-Identifier-Pattern.html#v:list
-
-~~~~~~{.haskell}
-route $ setExtension "html"
-~~~~~~
-
-For our pages, we do not want to use `idRoute` -- after all, we want to generate
-`.html` files, not `.markdown` files or something similar! The [setExtension]
-route allows you to simply replace the extension of an item, which is what we
-want here.
-
-[setExtension]: /reference/Hakyll-Core-Routes.html#v:setExtension
-
-~~~~~~{.haskell}
-compile $ pageCompiler
- >>> applyTemplateCompiler "templates/default.html"
- >>> relativizeUrlsCompiler
-~~~~~~
-
-How should we process these pages? [pageCompiler] is the default compiler for
-pages. [pageCompiler] does a few things:
-
-- It parses the page into body and metadata
-- It adds some extra metadata fields such as `$url$` and `$path$` (you shouldn't
- worry about these for now)
-- It fill in possible `$key$`'s in it's own body
-- It renders the page using pandoc
-
-Which basically means that we end up with a `Page` that has the HTML content we
-want as body. But we don't just want the plain content on our website -- we want
-to decorate it with a template, for starters.
-
-[pageCompiler]: /reference/Hakyll-Web-Page.html#v:pageCompiler
-
-Different compilers can be chained in a pipeline-like way using Arrows. Arrows
-form a complicated subject, but fortunately, most Hakyll users need not be
-concerned with the details. If you are interested, you can find some information
-on the [Understanding arrows] page -- but the only thing you really *need* to
-know is that you can chain compilers using the `>>>` operator.
-
-[Understanding arrows]: http://en.wikibooks.org/wiki/Haskell/Understanding_arrows
-
-The `>>>` operator is a lot like a flipped function composition (`flip (.)`) in
-Haskell, with the important difference that `>>>` is more general and works on
-all Arrows -- including Hakyll compilers.
-
-Here, we apply three compilers sequentially:
-
-1. We load and render the page using `pageCompiler`
-2. We apply the template we previously loaded using [applyTemplateCompiler]
-3. We relativize the URL's on the page using [relativizeUrlsCompiler]
-
-[applyTemplateCompiler]: /reference/Hakyll-Web-Template.html#v:applyTemplateCompiler
-[relativizeUrlsCompiler]: /reference/Hakyll-Web-RelativizeUrls.html#v:relativizeUrlsCompiler
-
-Relativizing URL's is a very handy feature. It means that we can just use
-absolute URL's everywhere in our templates and code, e.g.:
-
-~~~~~{.haskell}
-
-~~~~~
-
-And Hakyll will translate this to a relative URL for each page. This means we
-can host our site at `example.com` and `example.com/subdir` without changing a
-single line of code.
-
-More tutorials are in the works...
-
-Various tips and tricks
------------------------
-
-### Syntax highlighting
-
-Syntax highlighting is enabled by default in Hakyll. However, you also need to
-enable it in pandoc. If no syntax highlighting shows up, try
-
- [jasper@phoenix] cabal install --reinstall -fhighlighting pandoc
-
-### When to rebuild
-
-If you execute a `./hakyll build`, Hakyll will build your site incrementally.
-This means it will be very fast, but it will not pick up _all_ changes.
-
-- In case you edited `hakyll.hs`, you first want to compile it again.
-- It is generally recommended to do a `./hakyll rebuild` before you deploy your
- site.
-
-After rebuilding your site, all files will look as "modified" to the filesystem.
-This means that when you upload your site, it will usually transfer all files --
-this can generate more traffic than necessary, since it is possible that some
-files were not actually modified. If you use `rsync`, you can counter this using
-the `--checksum` option.
-
-Problems
---------
-
-### regex-pcre dependency on Mac OS
-
-Hakyll requires [regex-pcre], which might fail to build on Mac OS. To solve
-this problem, make sure the [pcre] C library is installed (via homebrew or
-macports). Then install [regex-pcre] using:
-
- cabal install --extra-include-dirs=/usr/local/include regex-pcre
-
-or
-
- cabal install --extra-include-dirs=/opt/local/include regex-pcre
-
-...and proceed to install Hakyll the regular way.
-
-[regex-pcre]: http://hackage.haskell.org/package/regex-pcre
-[pcre]: http://www.pcre.org/
-
-### "File name does not match module name" on Mac OS
-
- Hakyll.hs:1:1:
- File name does not match module name:
- Saw: `Main'
- Expected: `Hakyll'
-
-Is an error encountered on Mac OS when `hakyll.hs` is located on a
-case-insensitive filesystem. A workaround is to rename it to something that
-isn't the name of the module, for example, `site.hs`.
diff --git a/examples/morepages/about.markdown b/examples/morepages/about.markdown
deleted file mode 100644
index 65d8e9f..0000000
--- a/examples/morepages/about.markdown
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: About
----
-
-## Mattis
-
-Nullam imperdiet sodales orci vitae molestie. Nunc quam orci, pharetra a
-rhoncus vitae, eleifend id felis. Suspendisse potenti. Etiam vitae urna orci.
-Quisque pellentesque dignissim felis, egestas tempus urna luctus vitae. In hac
-habitasse platea dictumst. Morbi fringilla mattis odio, et mattis tellus
-accumsan vitae.
-
-## Orci
-
-Vivamus eget mauris sit amet nulla laoreet lobortis. Nulla in diam elementum
-risus convallis commodo. Cras vehicula varius dui vitae facilisis. Proin
-elementum libero eget leo aliquet quis euismod orci vestibulum. Duis rhoncus
-lorem consequat tellus vestibulum aliquam. Quisque orci orci, malesuada porta
-blandit et, interdum nec magna.
-
-## Augue
-
-In urna ante, pulvinar et imperdiet nec, fermentum ac tortor. Cras tristique
-pellentesque euismod. Pellentesque est ante, sagittis vitae vehicula vitae,
-ullamcorper eget lectus. Curabitur egestas accumsan leo, ac ullamcorper nibh
-tincidunt id. Curabitur lorem libero, fermentum non tincidunt ac, pretium in
-libero. Donec vel mi eu tortor accumsan dictum ut in augue. Vestibulum est
-lorem, bibendum eu vehicula eu, convallis eget mauris.
diff --git a/examples/morepages/css/default.css b/examples/morepages/css/default.css
deleted file mode 100644
index 76607cf..0000000
--- a/examples/morepages/css/default.css
+++ /dev/null
@@ -1,28 +0,0 @@
-body {
- width: 600px;
- margin: 0px auto 0px auto;
-}
-
-div#navigation {
- text-align: center;
- border-bottom: 4px solid black;
-}
-
-div#navigation a {
- color: white;
- text-decoration: none;
- background-color: black;
- padding: 3px 10px 3px 10px;
- margin: 0px 10px 0px 10px;
-}
-
-div.column {
- width: 30%;
- float: left;
- margin: 0px 10px 0px 10px;
-}
-
-div#footer {
- clear: both;
- border-top: 4px solid black;
-}
diff --git a/examples/morepages/footer.markdown b/examples/morepages/footer.markdown
deleted file mode 100644
index afcb47d..0000000
--- a/examples/morepages/footer.markdown
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Footer
----
-
-## Sapien
-
-In hac habitasse platea dictumst. Cras placerat felis nec risus varius in
-accumsan sem fermentum. Vestibulum elementum aliquam tortor semper vulputate.
-Vivamus tincidunt tellus sed purus tempor fringilla. Morbi dui nisl, eleifend
-non dictum vitae, luctus eu lacus. Duis vitae lacus sem, ut porta mauris.
-Aenean sed ultricies dui. Vivamus ullamcorper metus lorem, at ornare nibh.
-Mauris mi metus, convallis id lobortis vitae, interdum quis felis. Cras elit
-massa, pellentesque sit amet pharetra ut, volutpat in arcu. Vivamus blandit,
-ligula et ultricies consequat, metus sem congue quam, ac pretium enim velit at
-tortor. Cras in tellus eu sapien pulvinar sollicitudin eu id ipsum. Mauris nec
-urna tellus, et scelerisque tellus. Nunc imperdiet felis nec libero consectetur
-tristique tristique ipsum sodales. Cras tortor nisl, condimentum in
-pellentesque id, interdum vel mi. Suspendisse auctor vehicula orci at
-scelerisque. Vivamus quis sagittis felis.
diff --git a/examples/morepages/hakyll.hs b/examples/morepages/hakyll.hs
deleted file mode 100644
index c1b96e6..0000000
--- a/examples/morepages/hakyll.hs
+++ /dev/null
@@ -1,29 +0,0 @@
-{-# LANGUAGE OverloadedStrings, Arrows #-}
-module Main where
-
-import Control.Monad (forM_)
-import Control.Arrow (arr, (>>>))
-
-import Hakyll
-
-main :: IO ()
-main = hakyll $ do
- -- Compress CSS
- match "css/*" $ do
- route idRoute
- compile compressCssCompiler
-
- -- Render static pages
- forM_ ["about.markdown", "index.markdown", "products.markdown"] $ \p ->
- match p $ do
- route $ setExtension ".html"
- compile $ pageCompiler
- >>> requireA "footer.markdown" (setFieldA "footer" $ arr pageBody)
- >>> applyTemplateCompiler "templates/default.html"
- >>> relativizeUrlsCompiler
-
- -- Compile footer
- match "footer.markdown" $ compile pageCompiler
-
- -- Read templates
- match "templates/*" $ compile templateCompiler
diff --git a/examples/morepages/index.markdown b/examples/morepages/index.markdown
deleted file mode 100644
index 16fffd6..0000000
--- a/examples/morepages/index.markdown
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Home
----
-
-## Purus
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce tempor, urna et
-auctor tincidunt, eros mauris facilisis purus, eget sollicitudin leo massa sit
-amet ipsum. Vivamus eu massa in urna vehicula rutrum eget sit amet purus.
-
-## Ligula
-
-Mauris sit amet justo mi. Curabitur vel quam felis. In hac habitasse platea
-dictumst. Etiam nec consequat risus. Donec consequat est vitae neque fermentum
-feugiat nec ac nibh. Nulla rhoncus, odio quis scelerisque rutrum, metus sem
-tempor ante, a ornare ipsum felis sed ligula. Morbi urna lectus, scelerisque
-non pharetra in, rutrum quis ligula. Phasellus semper ullamcorper arcu eu
-auctor.
-
-## Justo
-
-Aliquam sagittis tincidunt libero ut elementum. Ut sit amet vestibulum metus.
-Ut aliquet congue neque eu tincidunt. Integer eu elit sed massa sollicitudin
-vehicula nec ut sem. Cras euismod enim eget purus lacinia non feugiat urna
-imperdiet. Aliquam justo sem, viverra eu vehicula vitae, imperdiet vel magna.
diff --git a/examples/morepages/products.markdown b/examples/morepages/products.markdown
deleted file mode 100644
index 68ffd36..0000000
--- a/examples/morepages/products.markdown
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Products
----
-
-## Lacus
-
-Etiam condimentum auctor semper. Donec lobortis, magna id sodales sollicitudin,
-lectus mi egestas nulla, pulvinar lobortis nunc eros id nisl. Curabitur
-imperdiet, erat at accumsan vulputate, purus nunc blandit nulla, dictum
-vestibulum sem lorem eget ipsum.
-
-## Vitae
-
-Integer ut dui eu felis mollis vestibulum. Etiam at nibh id diam aliquet
-vestibulum sit amet a nibh. Aliquam erat volutpat. Etiam vitae nulla at dolor
-fringilla tempor ut a nunc. Pellentesque elementum elit lorem. Quisque nec
-ligula ipsum. Nunc augue lacus, ullamcorper vel dapibus in, mattis eget elit.
-
-## Feugiat
-
-Pellentesque enim dui, interdum elementum vehicula luctus, feugiat vitae arcu.
-Vestibulum ut felis justo. Quisque vestibulum mauris eget ipsum luctus
-consequat. Nunc tincidunt, turpis ut fermentum dapibus,
-justo tortor bibendum sem, at facilisis justo odio luctus lectus.
diff --git a/examples/morepages/templates/default.html b/examples/morepages/templates/default.html
deleted file mode 100644
index 6cd490a..0000000
--- a/examples/morepages/templates/default.html
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
- MyAweSomeCompany - $title$
-
-
-
-
-
- $body$
-
-
-
-
diff --git a/examples/simpleblog/css/default.css b/examples/simpleblog/css/default.css
deleted file mode 100644
index 9ed2b01..0000000
--- a/examples/simpleblog/css/default.css
+++ /dev/null
@@ -1,17 +0,0 @@
-body {
- width: 600px;
- margin: 0px auto 0px auto;
-}
-
-div#navigation {
- text-align: center;
- border-bottom: 4px solid black;
-}
-
-div#navigation a {
- color: white;
- text-decoration: none;
- background-color: black;
- padding: 3px 10px 3px 10px;
- margin: 0px 10px 0px 10px;
-}
diff --git a/examples/simpleblog/hakyll.hs b/examples/simpleblog/hakyll.hs
deleted file mode 100644
index 270c3e3..0000000
--- a/examples/simpleblog/hakyll.hs
+++ /dev/null
@@ -1,55 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-module Main where
-
-import Prelude hiding (id)
-import Control.Category (id)
-import Control.Arrow ((>>>), (***), arr)
-import Data.Monoid (mempty, mconcat)
-
-import Hakyll
-
-main :: IO ()
-main = hakyll $ do
- -- Compress CSS
- match "css/*" $ do
- route idRoute
- compile compressCssCompiler
-
- -- Render posts
- match "posts/*" $ do
- route $ setExtension ".html"
- compile $ pageCompiler
- >>> applyTemplateCompiler "templates/post.html"
- >>> applyTemplateCompiler "templates/default.html"
- >>> relativizeUrlsCompiler
-
- -- Render posts list
- match "posts.html" $ route idRoute
- create "posts.html" $ constA mempty
- >>> arr (setField "title" "All posts")
- >>> requireAllA "posts/*" addPostList
- >>> applyTemplateCompiler "templates/posts.html"
- >>> applyTemplateCompiler "templates/default.html"
- >>> relativizeUrlsCompiler
-
- -- Index
- match "index.html" $ route idRoute
- create "index.html" $ constA mempty
- >>> arr (setField "title" "Home")
- >>> requireAllA "posts/*" (id *** arr (take 3 . reverse . sortByBaseName) >>> addPostList)
- >>> applyTemplateCompiler "templates/index.html"
- >>> applyTemplateCompiler "templates/default.html"
- >>> relativizeUrlsCompiler
-
- -- Read templates
- match "templates/*" $ compile templateCompiler
-
--- | Auxiliary compiler: generate a post list from a list of given posts, and
--- add it to the current page under @$posts@
---
-addPostList :: Compiler (Page String, [Page String]) (Page String)
-addPostList = setFieldA "posts" $
- arr (reverse . sortByBaseName)
- >>> require "templates/postitem.html" (\p t -> map (applyTemplate t) p)
- >>> arr mconcat
- >>> arr pageBody
diff --git a/examples/simpleblog/posts/2009-11-05-a-first-post.markdown b/examples/simpleblog/posts/2009-11-05-a-first-post.markdown
deleted file mode 100644
index 56b0405..0000000
--- a/examples/simpleblog/posts/2009-11-05-a-first-post.markdown
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: A first post
-author: Julius Caesar
-date: November 5, 2009
----
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pretium leo
-adipiscing lectus iaculis lobortis. Vivamus scelerisque velit dignissim metus
-gravida sit amet dapibus ligula tempor. Quisque sit amet viverra nunc.
-Suspendisse cursus elementum ante, ut venenatis nisi dictum eu. Nulla diam
-ligula, eleifend in varius quis, malesuada a nibh. Vivamus consequat
-pellentesque erat non blandit. Nunc sit amet eros vel massa semper ullamcorper
-quis iaculis magna. Vestibulum ullamcorper urna sit amet est elementum
-pulvinar. Vestibulum consequat lacus ac quam hendrerit tincidunt. Praesent
-bibendum vehicula diam, nec sagittis risus tempus a. Nulla quis odio sit amet
-odio vehicula cursus ut id odio. Curabitur semper magna euismod magna mollis
-venenatis. Nunc eget eleifend velit. Mauris sed posuere sem. Fusce id nunc
-nisi, a aliquam orci. Suspendisse laoreet justo non enim laoreet eget consequat
-velit porttitor. Aenean faucibus sodales metus at tincidunt. Donec vestibulum
-leo pulvinar erat auctor ac ultrices massa euismod. Phasellus blandit cursus
-magna, eget lacinia mi lobortis sed. Suspendisse ultricies enim ligula, vel
-scelerisque mauris.
diff --git a/examples/simpleblog/posts/2009-11-10-another-post.markdown b/examples/simpleblog/posts/2009-11-10-another-post.markdown
deleted file mode 100644
index 69b64c9..0000000
--- a/examples/simpleblog/posts/2009-11-10-another-post.markdown
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Another post
-author: Marcus Tullius Cicero
-date: November 10, 2009
----
-Vestibulum in ultrices urna. Etiam tempor enim dui, nec malesuada elit. Donec
-tempor ligula et quam volutpat quis fermentum eros congue. Sed ut pulvinar sem.
-Sed aliquam ipsum id purus sollicitudin vulputate. Cras et mauris dui, vel
-hendrerit leo. Ut metus ipsum, fermentum ac malesuada id, tempus pharetra quam.
-Donec diam felis, consequat ac scelerisque cursus, gravida non lectus. Sed
-faucibus elit dapibus diam elementum id varius nisi tristique. Proin consequat
-faucibus neque in aliquam. Vestibulum ligula odio, pulvinar vel hendrerit
-vitae, egestas ut nibh. Praesent ut velit elit, in consequat dolor. Praesent
-sem enim, commodo in gravida sed, adipiscing vel eros. Lorem ipsum dolor sit
-amet, consectetur adipiscing elit. Proin non aliquam nunc.
diff --git a/examples/simpleblog/posts/2009-11-28-a-third-post.markdown b/examples/simpleblog/posts/2009-11-28-a-third-post.markdown
deleted file mode 100644
index 76b0606..0000000
--- a/examples/simpleblog/posts/2009-11-28-a-third-post.markdown
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: A third post
-author: Publius Ovidius Naso
-date: November 28, 2009
----
-Pellentesque tempor blandit elit, vel ultricies arcu congue egestas. Fusce
-vitae rutrum nisl. Fusce id mauris libero, a venenatis tellus. Fusce iaculis,
-lorem et ornare molestie, mauris risus mollis nisi, non fermentum lacus lacus
-sit amet ipsum. Praesent lobortis ullamcorper dolor, eget convallis ligula
-dignissim a. Suspendisse nulla nisi, congue et pharetra vel, convallis non
-libero. Ut a nulla ipsum. Phasellus cursus velit id neque viverra ut
-pellentesque justo posuere. Curabitur laoreet enim et velit tempor consectetur.
-Donec eu pretium urna. Suspendisse vitae nisi at metus vestibulum aliquam in
-sit amet nisl. Donec convallis lacinia odio, vestibulum molestie nunc feugiat
-a. Suspendisse vehicula, sapien id aliquet consectetur, sem sapien ullamcorper
-arcu, scelerisque porttitor elit ipsum posuere ligula. Nulla at velit eu metus
-tincidunt auctor ut sit amet enim. Donec placerat dapibus nisi id facilisis.
-Maecenas pellentesque pulvinar auctor. Curabitur gravida quam sit amet purus
-consectetur blandit.
diff --git a/examples/simpleblog/posts/2009-12-04-this-blog-aint-dead.markdown b/examples/simpleblog/posts/2009-12-04-this-blog-aint-dead.markdown
deleted file mode 100644
index 015ce8d..0000000
--- a/examples/simpleblog/posts/2009-12-04-this-blog-aint-dead.markdown
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: This blog ain't dead
-author: Marcus Antonius
-date: December 4, 2009
----
-Etiam non felis aliquet tellus dictum vestibulum. Aliquam accumsan mauris non
-lacus ultricies nec lacinia enim rhoncus. Curabitur vel tortor massa, elementum
-tincidunt elit. Maecenas venenatis luctus arcu ut ullamcorper. Donec interdum
-dolor eu enim tristique vel vehicula risus mollis. Nunc nec tortor quam. Nulla
-a mauris arcu. Phasellus venenatis tortor vel odio tincidunt consequat. Integer
-venenatis nibh vitae lectus laoreet eu feugiat nunc pretium. Integer nec turpis
-metus, in fermentum lorem.
diff --git a/examples/simpleblog/posts/2009-12-23-almost-christmas.markdown b/examples/simpleblog/posts/2009-12-23-almost-christmas.markdown
deleted file mode 100644
index cf24399..0000000
--- a/examples/simpleblog/posts/2009-12-23-almost-christmas.markdown
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: Almost Christmas!
-author: Publius Vergilius Maro
-date: December 23, 2009
----
-Morbi tincidunt eleifend ante, eu gravida ante rutrum vel. Nunc bibendum nulla
-tellus, eget egestas sapien. Nam rhoncus interdum libero, eget congue orci
-imperdiet eu. Quisque pellentesque fringilla urna, ac venenatis ante ultricies
-et. Pellentesque habitant morbi tristique senectus et netus et malesuada fames
-ac turpis egestas. Mauris eleifend sagittis ultrices. Quisque ultrices accumsan
-nisl, sed pellentesque metus porta vitae. Nulla facilisi. In et nibh tincidunt
-mi volutpat pellentesque vitae nec sapien. Integer massa ipsum, pellentesque in
-elementum at, cursus sit amet diam.
diff --git a/examples/simpleblog/templates/default.html b/examples/simpleblog/templates/default.html
deleted file mode 100644
index 01ed20e..0000000
--- a/examples/simpleblog/templates/default.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
- SimpleBlog - $title$
-
-
-
-
diff --git a/examples/tagblog/css/default.css b/examples/tagblog/css/default.css
deleted file mode 100644
index 9ed2b01..0000000
--- a/examples/tagblog/css/default.css
+++ /dev/null
@@ -1,17 +0,0 @@
-body {
- width: 600px;
- margin: 0px auto 0px auto;
-}
-
-div#navigation {
- text-align: center;
- border-bottom: 4px solid black;
-}
-
-div#navigation a {
- color: white;
- text-decoration: none;
- background-color: black;
- padding: 3px 10px 3px 10px;
- margin: 0px 10px 0px 10px;
-}
diff --git a/examples/tagblog/hakyll.hs b/examples/tagblog/hakyll.hs
deleted file mode 100644
index 0f1e7ab..0000000
--- a/examples/tagblog/hakyll.hs
+++ /dev/null
@@ -1,99 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-module Main where
-
-import Prelude hiding (id)
-import Control.Arrow ((>>>), (***), arr)
-import Control.Category (id)
-import Data.Monoid (mempty, mconcat)
-
-import Hakyll
-
-main :: IO ()
-main = hakyll $ do
- -- Compress CSS
- match "css/*" $ do
- route idRoute
- compile compressCssCompiler
-
- -- Render posts
- match "posts/*" $ do
- route $ setExtension ".html"
- compile $ pageCompiler
- >>> arr (renderDateField "date" "%B %e, %Y" "Date unknown")
- >>> renderTagsField "prettytags" (fromCapture "tags/*")
- >>> applyTemplateCompiler "templates/post.html"
- >>> applyTemplateCompiler "templates/default.html"
- >>> relativizeUrlsCompiler
-
- -- Render posts list
- match "posts.html" $ route idRoute
- create "posts.html" $ constA mempty
- >>> arr (setField "title" "All posts")
- >>> requireAllA "posts/*" addPostList
- >>> applyTemplateCompiler "templates/posts.html"
- >>> applyTemplateCompiler "templates/default.html"
- >>> relativizeUrlsCompiler
-
- -- Index
- match "index.html" $ route idRoute
- create "index.html" $ constA mempty
- >>> arr (setField "title" "Home")
- >>> requireA "tags" (setFieldA "tagcloud" (renderTagCloud'))
- >>> requireAllA "posts/*" (id *** arr (take 3 . reverse . sortByBaseName) >>> addPostList)
- >>> applyTemplateCompiler "templates/index.html"
- >>> applyTemplateCompiler "templates/default.html"
- >>> relativizeUrlsCompiler
-
- -- Tags
- create "tags" $
- requireAll "posts/*" (\_ ps -> readTags ps :: Tags String)
-
- -- Add a tag list compiler for every tag
- match "tags/*" $ route $ setExtension ".html"
- metaCompile $ require_ "tags"
- >>> arr tagsMap
- >>> arr (map (\(t, p) -> (tagIdentifier t, makeTagList t p)))
-
- -- Render RSS feed
- match "rss.xml" $ route idRoute
- create "rss.xml" $
- requireAll_ "posts/*"
- >>> mapCompiler (arr $ copyBodyToField "description")
- >>> renderRss feedConfiguration
-
- -- Read templates
- match "templates/*" $ compile templateCompiler
- where
- renderTagCloud' :: Compiler (Tags String) String
- renderTagCloud' = renderTagCloud tagIdentifier 100 120
-
- tagIdentifier :: String -> Identifier
- tagIdentifier = fromCapture "tags/*"
-
--- | Auxiliary compiler: generate a post list from a list of given posts, and
--- add it to the current page under @$posts@
---
-addPostList :: Compiler (Page String, [Page String]) (Page String)
-addPostList = setFieldA "posts" $
- arr (reverse . sortByBaseName)
- >>> require "templates/postitem.html" (\p t -> map (applyTemplate t) p)
- >>> arr mconcat
- >>> arr pageBody
-
-makeTagList :: String
- -> [Page String]
- -> Compiler () (Page String)
-makeTagList tag posts =
- constA (mempty, posts)
- >>> addPostList
- >>> arr (setField "title" ("Posts tagged ‘" ++ tag ++ "’"))
- >>> applyTemplateCompiler "templates/posts.html"
- >>> applyTemplateCompiler "templates/default.html"
-
-feedConfiguration :: FeedConfiguration
-feedConfiguration = FeedConfiguration
- { feedTitle = "SimpleBlog RSS feed."
- , feedDescription = "A simple demo of an RSS feed created with Hakyll."
- , feedAuthorName = "Jasper Van der Jeugt"
- , feedRoot = "http://example.com"
- }
diff --git a/examples/tagblog/posts/2009-11-05-a-first-post.markdown b/examples/tagblog/posts/2009-11-05-a-first-post.markdown
deleted file mode 100644
index 3c9d4ab..0000000
--- a/examples/tagblog/posts/2009-11-05-a-first-post.markdown
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: A first post
-author: Julius Caesar
-tags: caesar, random crap
----
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pretium leo
-adipiscing lectus iaculis lobortis. Vivamus scelerisque velit dignissim metus
-gravida sit amet dapibus ligula tempor. Quisque sit amet viverra nunc.
-Suspendisse cursus elementum ante, ut venenatis nisi dictum eu. Nulla diam
-ligula, eleifend in varius quis, malesuada a nibh. Vivamus consequat
-pellentesque erat non blandit. Nunc sit amet eros vel massa semper ullamcorper
-quis iaculis magna. Vestibulum ullamcorper urna sit amet est elementum
-pulvinar. Vestibulum consequat lacus ac quam hendrerit tincidunt. Praesent
-bibendum vehicula diam, nec sagittis risus tempus a. Nulla quis odio sit amet
-odio vehicula cursus ut id odio. Curabitur semper magna euismod magna mollis
-venenatis. Nunc eget eleifend velit. Mauris sed posuere sem. Fusce id nunc
-nisi, a aliquam orci. Suspendisse laoreet justo non enim laoreet eget consequat
-velit porttitor. Aenean faucibus sodales metus at tincidunt. Donec vestibulum
-leo pulvinar erat auctor ac ultrices massa euismod. Phasellus blandit cursus
-magna, eget lacinia mi lobortis sed. Suspendisse ultricies enim ligula, vel
-scelerisque mauris.
diff --git a/examples/tagblog/posts/2009-11-10-another-post.markdown b/examples/tagblog/posts/2009-11-10-another-post.markdown
deleted file mode 100644
index 2fffc7c..0000000
--- a/examples/tagblog/posts/2009-11-10-another-post.markdown
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Another post
-author: Marcus Tullius Cicero
-tags: cicero, random crap
----
-
-Vestibulum in ultrices urna. Etiam tempor enim dui, nec malesuada elit. Donec
-tempor ligula et quam volutpat quis fermentum eros congue. Sed ut pulvinar sem.
-Sed aliquam ipsum id purus sollicitudin vulputate. Cras et mauris dui, vel
-hendrerit leo. Ut metus ipsum, fermentum ac malesuada id, tempus pharetra quam.
-Donec diam felis, consequat ac scelerisque cursus, gravida non lectus. Sed
-faucibus elit dapibus diam elementum id varius nisi tristique. Proin consequat
-faucibus neque in aliquam. Vestibulum ligula odio, pulvinar vel hendrerit
-vitae, egestas ut nibh. Praesent ut velit elit, in consequat dolor. Praesent
-sem enim, commodo in gravida sed, adipiscing vel eros. Lorem ipsum dolor sit
-amet, consectetur adipiscing elit. Proin non aliquam nunc.
diff --git a/examples/tagblog/posts/2009-11-28-a-third-post.markdown b/examples/tagblog/posts/2009-11-28-a-third-post.markdown
deleted file mode 100644
index afabcc7..0000000
--- a/examples/tagblog/posts/2009-11-28-a-third-post.markdown
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: A third post
-author: Publius Ovidius Naso
-tags: epic fail, ovidius
----
-
-Pellentesque tempor blandit elit, vel ultricies arcu congue egestas. Fusce
-vitae rutrum nisl. Fusce id mauris libero, a venenatis tellus. Fusce iaculis,
-lorem et ornare molestie, mauris risus mollis nisi, non fermentum lacus lacus
-sit amet ipsum. Praesent lobortis ullamcorper dolor, eget convallis ligula
-dignissim a. Suspendisse nulla nisi, congue et pharetra vel, convallis non
-libero. Ut a nulla ipsum. Phasellus cursus velit id neque viverra ut
-pellentesque justo posuere. Curabitur laoreet enim et velit tempor consectetur.
-Donec eu pretium urna. Suspendisse vitae nisi at metus vestibulum aliquam in
-sit amet nisl. Donec convallis lacinia odio, vestibulum molestie nunc feugiat
-a. Suspendisse vehicula, sapien id aliquet consectetur, sem sapien ullamcorper
-arcu, scelerisque porttitor elit ipsum posuere ligula. Nulla at velit eu metus
-tincidunt auctor ut sit amet enim. Donec placerat dapibus nisi id facilisis.
-Maecenas pellentesque pulvinar auctor. Curabitur gravida quam sit amet purus
-consectetur blandit.
diff --git a/examples/tagblog/posts/2009-12-04-this-blog-aint-dead.markdown b/examples/tagblog/posts/2009-12-04-this-blog-aint-dead.markdown
deleted file mode 100644
index 0c56146..0000000
--- a/examples/tagblog/posts/2009-12-04-this-blog-aint-dead.markdown
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: This blog ain't dead
-author: Marcus Antonius
-tags: epic fail, antonius
----
-
-Etiam non felis aliquet tellus dictum vestibulum. Aliquam accumsan mauris non
-lacus ultricies nec lacinia enim rhoncus. Curabitur vel tortor massa, elementum
-tincidunt elit. Maecenas venenatis luctus arcu ut ullamcorper. Donec interdum
-dolor eu enim tristique vel vehicula risus mollis. Nunc nec tortor quam. Nulla
-a mauris arcu. Phasellus venenatis tortor vel odio tincidunt consequat. Integer
-venenatis nibh vitae lectus laoreet eu feugiat nunc pretium. Integer nec turpis
-metus, in fermentum lorem.
diff --git a/examples/tagblog/posts/2009-12-23-almost-christmas.markdown b/examples/tagblog/posts/2009-12-23-almost-christmas.markdown
deleted file mode 100644
index 78a1508..0000000
--- a/examples/tagblog/posts/2009-12-23-almost-christmas.markdown
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Almost Christmas!
-author: Publius Vergilius Maro
-tags: christmas, random crap
----
-
-Morbi tincidunt eleifend ante, eu gravida ante rutrum vel. Nunc bibendum nulla
-tellus, eget egestas sapien. Nam rhoncus interdum libero, eget congue orci
-imperdiet eu. Quisque pellentesque fringilla urna, ac venenatis ante ultricies
-et. Pellentesque habitant morbi tristique senectus et netus et malesuada fames
-ac turpis egestas. Mauris eleifend sagittis ultrices. Quisque ultrices accumsan
-nisl, sed pellentesque metus porta vitae. Nulla facilisi. In et nibh tincidunt
-mi volutpat pellentesque vitae nec sapien. Integer massa ipsum, pellentesque in
-elementum at, cursus sit amet diam.
diff --git a/examples/tagblog/templates/default.html b/examples/tagblog/templates/default.html
deleted file mode 100644
index 0537065..0000000
--- a/examples/tagblog/templates/default.html
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
- SimpleBlog - $title$
-
-
-
-
-
diff --git a/web/about.markdown b/web/about.markdown
new file mode 100644
index 0000000..108663b
--- /dev/null
+++ b/web/about.markdown
@@ -0,0 +1,36 @@
+---
+title: About
+---
+
+## Code
+
+The code for Hakyll is freely available on
+[github](http://github.com/jaspervdj/Hakyll/). Patches and suggestions are
+always very welcome.
+
+## Inspiration
+
+Hakyll is not the only static site generator out there. It was inspired by the
+following awesome projects:
+
+- [yst](http://github.com/jgm/yst)
+- [nanoc](http://nanoc.stoneship.org/)
+- [Jekyll](http://jekyllrb.com/)
+
+## License
+
+Hakyll is available under a BSD license. Note, however, that pandoc is
+released under a GPL license. Since you'll probably use Hakyll with pandoc,
+you will have to license your code under a GPL-compatible license.
+
+## Authors
+
+Hakyll was originally written by [Jasper Van der Jeugt](http://jaspervdj.be),
+who still maintains the package. Contributors:
+
+- [seschwar](http://github.com/seschwar)
+- [JD Marble](http://github.com/jdmarble)
+- [sargon](http://github.com/sargon)
+- [Paolo Veronelli](http://github.com/paolino)
+- [Benedict Eastaugh](http://extralogical.net/)
+- [Nicolas Wu](http://zenzike.com/)
diff --git a/web/changelog.markdown b/web/changelog.markdown
new file mode 100644
index 0000000..9c6c2cf
--- /dev/null
+++ b/web/changelog.markdown
@@ -0,0 +1,137 @@
+---
+title: Changelog
+---
+
+## Hakyll 3.1.1
+
+- Allow `group` in rules DSL
+
+## Hakyll 3.1
+
+- New `match` function in rules DSL
+- More expressive `Pattern`s
+
+## Hakyll 3
+
+- Complete rewrite
+
+## Hakyll 2.4.1
+
+- Add a number of utility functions
+- Fix bug in `enableIndexUrl` mode
+
+## Hakyll 2.4
+
+- Arrow based interface to pandoc
+- Easier custom fields
+
+## Hakyll 2.3
+
+- Ability to choose between preview modes.
+- Simple static configuration available.
+- Support hamlet templates.
+
+## Hakyll 2.2.2
+
+- Cabal dependency fixes.
+
+## Hakyll 2.2.1
+
+- Allow custom time locale for `renderDate`.
+- Render RSS feeds with `CDATA` sections.
+
+## Hakyll 2.2
+
+- Allow markup languages in templates.
+
+## Hakyll 2.1.1
+
+- Fix issues in autocompilation/preview mode.
+
+## Hakyll 2.1
+
+May 21, 2010
+
+- Expose pandoc options to HakyllConfiguration.
+- Allow dashes in pages.
+- Some typo's and bugs fixed.
+
+## Hakyll 2.0
+
+March 31, 2010
+
+- Rewrite of the API to a clean, Arrow based API.
+- Added built-in support for RSS and Atom.
+- Added more documentation.
+- Added pagination.
+- Many bugfixes.
+
+## Hakyll 1.4
+
+February 17, 2010
+
+- Added an autocompilation feature.
+- Support for index URL's (`enableIndexUrl`).
+
+## Hakyll 1.3
+
+January 30, 2010
+
+- Added categories in addition to tags.
+- Added `createListing` and `createListingWith` function for a more high-level
+ way to create listings.
+
+## Hakyll 1.2
+
+January 27, 2010
+
+- `Data.Binary` is now used for serialization.
+- Rewrite of the caching system.
+- Specialized data structure for templates.
+- Caching of pages and templates.
+
+## Hakyll 1.1
+
+January 19, 2010
+
+- Switched to a custom `Hakyll` monad stack instead of the `IO` monad.
+- Page sections.
+- Combining renderables.
+- `renderAndConcat` can now use multiple templates.
+
+## Hakyll 1.0
+
+January 14, 2009
+
+- First stable release.
+- Custom templating system.
+- Added `$root` key for relative URL's.
+
+## Hakyll 0.4
+
+January 8, 2010
+
+- Added examples.
+- Added `ContextManipulation` type.
+
+## Hakyll 0.3
+
+December 28, 2009
+
+- Added a general `directory` function.
+- Added CSS compression.
+- Added tag support.
+- Added a simple HTTP server for testing purposes.
+
+## Hakyll 0.2
+
+December 16, 2010
+
+- Abstracted `Renderable` type.
+- Added simple caching and dependency checking.
+
+## Hakyll 0.1
+
+December 5, 2009
+
+- Initial release.
diff --git a/web/css/default.css b/web/css/default.css
new file mode 100644
index 0000000..06f664c
--- /dev/null
+++ b/web/css/default.css
@@ -0,0 +1,118 @@
+html {
+ padding: 0px;
+ margin: 0px;
+ background-color: white;
+ color: black;
+ font-family: sans-serif;
+ line-height: 160%;
+}
+
+body {
+ padding: 0px 0px 60px 0px;
+ margin: 0px;
+}
+
+div#header {
+ height: 32px;
+ padding: 20px 0px 20px 60px;
+}
+
+div#header img {
+ display: inline;
+ vertical-align: middle;
+}
+
+div#header h1 {
+ padding-left: 10px;
+ display: inline;
+ text-transform: uppercase;
+ vertical-align: middle;
+}
+
+div#main {
+ margin: 0px auto 0px auto;
+ width: 860px;
+}
+
+div#sidebar {
+ margin-right: 30px;
+ width: 160px;
+ float: left;
+ text-align: right;
+}
+
+div#sidebar a {
+ display: block;
+ font-size: 110%;
+ text-decoration: none;
+ margin-bottom: 10px;
+ text-transform: uppercase;
+}
+
+div#content {
+ width: 670px;
+ float: right;
+}
+
+div#footer {
+ padding-top: 30px;
+ clear: both;
+ font-size: 90%;
+ text-align: center;
+}
+
+a {
+ color: black;
+}
+
+h2 {
+ font-size: 120%;
+ text-transform: uppercase;
+}
+
+h3 {
+ font-size: 100%;
+ text-transform: uppercase;
+}
+
+h1 a, h2 a, h3 a {
+ text-decoration: none;
+}
+
+div.column {
+ width: 50%;
+ float: left;
+}
+
+div.column p {
+ padding-right: 15px;
+}
+
+img {
+ display: block;
+ margin: 10px auto 10px auto;
+ border: none;
+}
+
+ul {
+ list-style-type: square;
+ padding-left: 1em;
+ margin-left: 1em;
+}
+
+code {
+ background-color: rgb(250, 250, 250);
+ border: 1px solid rgb(200, 200, 200);
+ padding-left: 4px;
+ padding-right: 4px;
+}
+
+pre code {
+ display: block;
+ padding: 8px;
+ margin-bottom: 2em;
+}
+
+p.caption {
+ display: none;
+}
diff --git a/web/css/syntax.css b/web/css/syntax.css
new file mode 100644
index 0000000..1aed859
--- /dev/null
+++ b/web/css/syntax.css
@@ -0,0 +1,18 @@
+/* Generated by pandoc. */
+table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode, table.sourceCode pre
+ { margin: 0; padding: 0; border: 0; vertical-align: baseline; border: none; }
+td.lineNumbers { border-right: 1px solid #AAAAAA; text-align: right; color: #AAAAAA; padding-right: 5px; padding-left: 5px; }
+td.sourceCode { padding-left: 5px; }
+pre.sourceCode span.kw { color: #007020; font-weight: bold; }
+pre.sourceCode span.dt { color: #902000; }
+pre.sourceCode span.dv { color: #40a070; }
+pre.sourceCode span.bn { color: #40a070; }
+pre.sourceCode span.fl { color: #40a070; }
+pre.sourceCode span.ch { color: #4070a0; }
+pre.sourceCode span.st { color: #4070a0; }
+pre.sourceCode span.co { color: #60a0b0; font-style: italic; }
+pre.sourceCode span.ot { color: #007020; }
+pre.sourceCode span.al { color: red; font-weight: bold; }
+pre.sourceCode span.fu { color: #06287e; }
+pre.sourceCode span.re { }
+pre.sourceCode span.er { color: red; font-weight: bold; }
diff --git a/web/examples.markdown b/web/examples.markdown
new file mode 100644
index 0000000..453a22e
--- /dev/null
+++ b/web/examples.markdown
@@ -0,0 +1,27 @@
+---
+title: Examples
+---
+
+## Simple examples
+
+A number of simple examples are available in the GitHub repository. They can be
+found [here](https://github.com/jaspervdj/hakyll/tree/master/examples). The
+README located in that directory explains which example does what.
+
+## People using Hakyll
+
+A lot of sites running Hakyll also publish the source code. This is a very
+interesting resource to learn from as well. If you're using Hakyll for your
+site, and the source code is available, please notify me so I can add you to
+this list. This list has no particular ordering.
+
+- ,
+ [source](https://github.com/jaspervdj/jaspervdj)
+- ,
+ [source](https://github.com/altercation/ethanschoonover.com)
+- ,
+ [source](https://github.com/beastaugh/extralogical.net)
+- ,
+ [source](https://bitbucket.org/paul_r/blog-de-demotera)
+- ,
+ [source](http://patch-tag.com/r/byorgey/diagrams-doc/snapshot/current/content/pretty/web/)
diff --git a/web/examples/brochure.zip b/web/examples/brochure.zip
new file mode 100644
index 0000000..cfbe052
Binary files /dev/null and b/web/examples/brochure.zip differ
diff --git a/web/examples/feedblog.zip b/web/examples/feedblog.zip
new file mode 100644
index 0000000..0adaf1e
Binary files /dev/null and b/web/examples/feedblog.zip differ
diff --git a/web/examples/morepages.zip b/web/examples/morepages.zip
new file mode 100644
index 0000000..617e0f6
Binary files /dev/null and b/web/examples/morepages.zip differ
diff --git a/web/examples/simpleblog.zip b/web/examples/simpleblog.zip
new file mode 100644
index 0000000..a67f362
Binary files /dev/null and b/web/examples/simpleblog.zip differ
diff --git a/web/examples/tagblog.zip b/web/examples/tagblog.zip
new file mode 100644
index 0000000..d758225
Binary files /dev/null and b/web/examples/tagblog.zip differ
diff --git a/web/hakyll.hs b/web/hakyll.hs
new file mode 100644
index 0000000..df92ddd
--- /dev/null
+++ b/web/hakyll.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE OverloadedStrings #-}
+import Hakyll
+import Control.Monad (forM_)
+import Control.Arrow ((>>>), arr)
+import Text.Pandoc
+
+main :: IO ()
+main = hakyll $ do
+ match "css/*" $ do
+ route idRoute
+ compile compressCssCompiler
+
+ -- Static directories
+ forM_ ["images/*", "examples/*", "reference/**"] $ \f -> match f $ do
+ route idRoute
+ compile copyFileCompiler
+
+ -- Pages
+ forM_ pages $ \p -> match p $ do
+ route $ setExtension "html"
+ compile $ pageCompiler
+ >>> requireA "sidebar.markdown" (setFieldA "sidebar" $ arr pageBody)
+ >>> applyTemplateCompiler "templates/default.html"
+ >>> relativizeUrlsCompiler
+
+ -- Tutorial
+ match "tutorial.markdown" $ do
+ route $ setExtension "html"
+ compile $ readPageCompiler
+ >>> pageRenderPandocWith defaultHakyllParserState withToc
+ >>> requireA "sidebar.markdown" (setFieldA "sidebar" $ arr pageBody)
+ >>> applyTemplateCompiler "templates/default.html"
+ >>> relativizeUrlsCompiler
+
+ -- Sidebar
+ match "sidebar.markdown" $ compile pageCompiler
+
+ -- Templates
+ match "templates/*" $ compile templateCompiler
+ where
+ withToc = defaultHakyllWriterOptions
+ { writerTableOfContents = True
+ , writerTemplate = "
Table of contents
\n$toc$\n$body$"
+ , writerStandalone = True
+ }
+
+ pages = [ "about.markdown"
+ , "changelog.markdown"
+ , "examples.markdown"
+ , "index.markdown"
+ , "philosophy.markdown"
+ , "reference.markdown"
+ ]
diff --git a/web/images/brochure-files.png b/web/images/brochure-files.png
new file mode 100644
index 0000000..41af36e
Binary files /dev/null and b/web/images/brochure-files.png differ
diff --git a/web/images/hakyll-system-1.png b/web/images/hakyll-system-1.png
new file mode 100644
index 0000000..69e850c
Binary files /dev/null and b/web/images/hakyll-system-1.png differ
diff --git a/web/images/hakyll-system-2.png b/web/images/hakyll-system-2.png
new file mode 100644
index 0000000..eb424a9
Binary files /dev/null and b/web/images/hakyll-system-2.png differ
diff --git a/web/images/hakyll-system-3.png b/web/images/hakyll-system-3.png
new file mode 100644
index 0000000..cdffe2d
Binary files /dev/null and b/web/images/hakyll-system-3.png differ
diff --git a/web/images/lambda.png b/web/images/lambda.png
new file mode 100644
index 0000000..fbf34a8
Binary files /dev/null and b/web/images/lambda.png differ
diff --git a/web/index.markdown b/web/index.markdown
new file mode 100644
index 0000000..ee44cf3
--- /dev/null
+++ b/web/index.markdown
@@ -0,0 +1,43 @@
+---
+title: Home
+---
+
+## Overview
+
+Hakyll is a [Haskell](http://haskell.org) library for generating static sites,
+mostly aimed at small-to-medium sites and personal blogs. It is written in a
+very configurable way and uses an [xmonad](http://xmonad.org)-like DSL for
+configuration.
+
+Integration with [pandoc](http://johnmacfarlane.net/pandoc/) gives us markdown
+and TeX support, including syntax highlighting and other goodies.
+
+## The Hakyll System
+
+### Write your content in whatever format you prefer
+
+
+
+### Create compilation rules in a Haskell EDSL
+
+
+
+### Compile it to HTML and upload it!
+
+
+
+## Hakyll 3
+
+Hakyll 3 has been released, and it can be installed by running
+`cabal install hakyll`. For a limited time (but as long as is necessary) you can
+access the old site and documentation [here](/hakyll2).
+
+## Getting Started
+
+You can get the latest version from hackage using `cabal install hakyll`. Then,
+you can:
+
+- read the [tutorial](/tutorial.html);
+- mail the [google discussion group](http://groups.google.com/group/hakyll);
+- ask questions on the IRC channel: `#hakyll` on
+ [freenode](http://freenode.net/).
diff --git a/web/philosophy.markdown b/web/philosophy.markdown
new file mode 100644
index 0000000..07a20c3
--- /dev/null
+++ b/web/philosophy.markdown
@@ -0,0 +1,28 @@
+---
+title: Philosophy
+---
+
+## Small-to-medium sites
+
+Hakyll was written to be used for small-to-medium sites. You can do some
+advanced things with it, but don't use it to build a big online shop.
+
+## Hakyll.hs
+
+It should be possible to put all configuration in one file, so data and
+configuration can be strictly separated. In addition, we think this file should
+never exceed a 100 lines of code.
+
+## High-level
+
+Hakyll tries to provide as many high-level functions as possible for common
+tasks, while the lower-level functions should also be accessible. If you think
+you're writing something that can be used for many sites, please send a patch,
+or your `hakyll.hs`, and we will see what we can do.
+
+## Well-documented
+
+A key to being easy-to-use is documentation. That's why we try to provide as
+many working examples as possible. If you ever create a site using hakyll,
+please consider open-sourcing it, as people might be able to learn from your
+code.
diff --git a/web/reference.markdown b/web/reference.markdown
new file mode 100644
index 0000000..9b4d9e4
--- /dev/null
+++ b/web/reference.markdown
@@ -0,0 +1,10 @@
+---
+title: Reference
+---
+
+## Reference
+
+We keep a copy of the reference of the latest stable version here. This
+reference is automatically generated by
+[Haddock](http://www.haskell.org/haddock/). You can
+[find it here](reference/index.html).
diff --git a/web/sidebar.markdown b/web/sidebar.markdown
new file mode 100644
index 0000000..8396c75
--- /dev/null
+++ b/web/sidebar.markdown
@@ -0,0 +1,9 @@
+## Navigation
+
+[home](/index.html)
+[philosophy](/philosophy.html)
+[about](/about.html)
+[tutorial](/tutorial.html)
+[examples](/examples.html)
+[reference](/reference.html)
+[changelog](/changelog.html)
diff --git a/web/templates/default.html b/web/templates/default.html
new file mode 100644
index 0000000..040292c
--- /dev/null
+++ b/web/templates/default.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+ Hakyll - $title$
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Hakyll is an open source project, and one of the hardest parts is writing
+correct, up-to-date, and understandable documentation. Therefore, the
+authors would really appreciate it if you would
+give some feedback about
+the tutorials, and especially report errors or difficulties you encountered.
+Thanks!
diff --git a/web/templates/tutorialitem.html b/web/templates/tutorialitem.html
new file mode 100644
index 0000000..01fb298
--- /dev/null
+++ b/web/templates/tutorialitem.html
@@ -0,0 +1,3 @@
+
+
diff --git a/web/tutorial.markdown b/web/tutorial.markdown
new file mode 100644
index 0000000..920249d
--- /dev/null
+++ b/web/tutorial.markdown
@@ -0,0 +1,351 @@
+---
+title: Tutorial
+---
+
+Why static websites?
+--------------------
+
+Modern web frameworks make it easy to create huge dynamic websites. Why would
+anyone still care about a static website?
+
+- Static websites are fast, because it's simply files served directly from the
+ hard disk.
+- Static websites are secure. Nobody has ever found an SQL injection in static
+ pages.
+- Static websites are easy to deploy. Just copy them to your webhost using
+ (S)FTP/rsync/scp and you are done. They work on all webhosts: no CGI or extra
+ modules needed for the web server.
+
+Why Hakyll?
+-----------
+
+Hakyll is a [Haskell] library meant for creating small-to-medium sized static
+websites. It is a powerful publishing tool, precisely because of the power of
+Haskell. By using the awesome [pandoc] library, it is able to create your
+website from a large variety of input formats.
+
+[Haskell]: http://haskell.org/
+[pandoc]: http://johnmacfarlane.net/pandoc/
+
+Features include:
+
+- easy templating system;
+- a simple HTTP server for previewing and compiling your website on the go;
+- powerful syntax highlighting;
+- modules for common items such as tags and feeds;
+- easily extensible.
+
+Let's get started!
+------------------
+
+We're going to discuss a small brochure site to start with. You can find all
+code and files necessary to build this site [right here](/examples/brochure.zip)
+-- feel free to look at them as we go trough the tutorial, in fact, it might be
+very learnful to have a closer look at the files as we discuss them. There's a
+number of files we will use:
+
+ about.rst A simple page written in RST format
+ code.lhs Another page with some code (which can be highlighted)
+ css Directory for CSS files
+ |- default.css The main CSS file
+ \- syntax.css CSS file for code syntax highlighting
+ hakyll.hs Our code to generate the site
+ images Directory for images
+ \- haskell-logo.png The logo of my favorite programming language
+ index.markdown A simple page in markdown format
+ templates Directory for templates
+ \- default.html The main template for the site
+
+By default, hakyll will compile everything to the `_site` directory. We can try
+this like this:
+
+ [jasper@phoenix] ghc --make hakyll.hs
+ [jasper@phoenix] ./hakyll build
+
+Instead of using `build`, we can also use `preview`, which will fire up a
+webserver serving the `_site` directory, so have a look!
+
+All files have been compiled, and their output has been placed in the `_site`
+directory as illustrated in this diagram:
+
+
+
+No magic is involved at all -- we will precisely study how and why our items are
+compiled like that. All of this is specified in the `hakyll.hs` file.
+
+### Images
+
+Let's start of with the `images/haskell-logo.png` file, because the processing
+of this file is very simple: it is simply copied to the output directory. Let's
+look at the relevant lines in the `hakyll.hs` file:
+
+~~~~~{.haskell}
+match "images/*" $ do
+ route idRoute
+ compile copyFileCompiler
+~~~~~
+
+The first line specifies we will describe the process for compiling everything
+in the `images/` folder: hakyll uses globs for this [^pattern].
+
+[^pattern]: A little caveat is that these globs are not `String`s but
+ `Pattern`s, so you need the `OverloadedStrings` extension.
+
+We can see two simple rules next: [route] and [compile].
+
+- [route] determines how the input file(s) get mapped to the output files.
+ [route] only deals with file names -- not with the actual content!
+- [compile], on the other hand, determines how the file content is processed.
+
+[route]: /reference/Hakyll-Core-Rules.html#v:route
+[compile]: /reference/Hakyll-Core-Rules.html#v:compile
+
+In this case, we select the [idRoute]: which means the file name will be kept
+the same (`_site` will always be prepended automatically). This explains the
+name of [idRoute]: much like the `id` function in Haskell, it also maps values
+to themselves.
+
+[idRoute]: /reference/Hakyll-Core-Routes.html#v:idRoute
+
+For our compiler, we use [copyFileCompiler], meaning that we don't process the
+content at all, we just copy the file.
+
+[copyFileCompiler]: /reference/Hakyll-Core-Writable-CopyFile.html#v:copyFileCompiler
+
+### CSS
+
+If we look at how the two CSS files are processed, we see something which looks
+very familiar:
+
+~~~~~{.haskell}
+match "css/*" $ do
+ route idRoute
+ compile compressCssCompiler
+~~~~~
+
+Indeed, the only difference with the images is that have now chosen for
+[compressCssCompiler] -- a compiler which *does* process the content. Let's have
+a quick look at the type of [compressCssCompiler]:
+
+[compressCssCompiler]: /reference/Hakyll-Web-CompressCss.html#v:compressCssCompiler
+
+~~~~~{.haskell}
+compressCssCompiler :: Compiler Resource String
+~~~~~
+
+Intuitively, we can see this as a process which takes a `Resource` and produces
+a `String`.
+
+- A `Resource` is simply the Hakyll representation of an item -- usually just a
+ file on the disk.
+- The produced string is the processed CSS.
+
+We can wonder what Hakyll does with the resulting `String`. Well, it simply
+writes this to the file specified in the `route`! As you can see, routes and
+compilers work together to produce your site.
+
+### Templates
+
+Next, we can see that the templates are compiled:
+
+~~~~~{.haskell}
+match "templates/*" $ compile templateCompiler
+~~~~~
+
+Let's start with the basics: what is a template? An example template gives us a
+good impression:
+
+~~~~~
+
+
+ Hakyll Example - $title$
+
+
+
$title$
+
+ $body$
+
+
+~~~~~
+
+A template is a text file to lay our some content. The content it lays out is
+called a page -- we'll see that in the next section. The syntax for templates is
+intentionally very simplistic. You can bind some content by referencing the name
+of the content *field* by using `$field$`, and that's it.
+
+You might have noticed how we specify a compiler (`compile`), but we don't set
+any `route`. Why is this?
+
+Precisely because we don't want to our template to end up anywhere in our site
+directory! We want to use it to lay out other items -- so we need to load
+(compile) it, but we don't want to give it a real destination.
+
+By using the `templates/*` pattern, we compile all templates in one go.
+
+### Pages
+
+The code for pages looks suspiciously more complicated:
+
+~~~~~~{.haskell}
+match (list ["about.rst", "index.markdown", "code.lhs"]) $ do
+ route $ setExtension "html"
+ compile $ pageCompiler
+ >>> applyTemplateCompiler "templates/default.html"
+ >>> relativizeUrlsCompiler
+~~~~~~
+
+But we'll see shortly that this actually fairly straightforward. Let's begin by
+exploring what a *page* is.
+
+~~~~~~
+---
+title: Home
+author: Jasper
+---
+
+So, I decided to create a site using Hakyll and...
+~~~~~~
+
+A page consists of two parts: a body, and metadata. As you can see above, the
+syntax is not hard. The metadata part is completely optional, this is the same
+page without metadata:
+
+~~~~~~
+So, I decided to create a site using Hakyll and...
+~~~~~~
+
+Hakyll supports a number of formats for the page body. Markdown, HTML and RST
+are probably the most common. Hakyll will automatically guess the right format
+if you use the right extension for your page.
+
+~~~~~~{.haskell}
+match (list ["about.rst", "index.markdown", "code.lhs"]) $ do
+~~~~~~
+
+We see a more complicated pattern here. Some sets of files cannot be described
+easily by just one pattern, and here the [list] function can help us out. In
+this case, we have three specific pages we want to compile.
+
+[list]: /reference/Hakyll-Core-Identifier-Pattern.html#v:list
+
+~~~~~~{.haskell}
+route $ setExtension "html"
+~~~~~~
+
+For our pages, we do not want to use `idRoute` -- after all, we want to generate
+`.html` files, not `.markdown` files or something similar! The [setExtension]
+route allows you to simply replace the extension of an item, which is what we
+want here.
+
+[setExtension]: /reference/Hakyll-Core-Routes.html#v:setExtension
+
+~~~~~~{.haskell}
+compile $ pageCompiler
+ >>> applyTemplateCompiler "templates/default.html"
+ >>> relativizeUrlsCompiler
+~~~~~~
+
+How should we process these pages? [pageCompiler] is the default compiler for
+pages. [pageCompiler] does a few things:
+
+- It parses the page into body and metadata
+- It adds some extra metadata fields such as `$url$` and `$path$` (you shouldn't
+ worry about these for now)
+- It fill in possible `$key$`'s in it's own body
+- It renders the page using pandoc
+
+Which basically means that we end up with a `Page` that has the HTML content we
+want as body. But we don't just want the plain content on our website -- we want
+to decorate it with a template, for starters.
+
+[pageCompiler]: /reference/Hakyll-Web-Page.html#v:pageCompiler
+
+Different compilers can be chained in a pipeline-like way using Arrows. Arrows
+form a complicated subject, but fortunately, most Hakyll users need not be
+concerned with the details. If you are interested, you can find some information
+on the [Understanding arrows] page -- but the only thing you really *need* to
+know is that you can chain compilers using the `>>>` operator.
+
+[Understanding arrows]: http://en.wikibooks.org/wiki/Haskell/Understanding_arrows
+
+The `>>>` operator is a lot like a flipped function composition (`flip (.)`) in
+Haskell, with the important difference that `>>>` is more general and works on
+all Arrows -- including Hakyll compilers.
+
+Here, we apply three compilers sequentially:
+
+1. We load and render the page using `pageCompiler`
+2. We apply the template we previously loaded using [applyTemplateCompiler]
+3. We relativize the URL's on the page using [relativizeUrlsCompiler]
+
+[applyTemplateCompiler]: /reference/Hakyll-Web-Template.html#v:applyTemplateCompiler
+[relativizeUrlsCompiler]: /reference/Hakyll-Web-RelativizeUrls.html#v:relativizeUrlsCompiler
+
+Relativizing URL's is a very handy feature. It means that we can just use
+absolute URL's everywhere in our templates and code, e.g.:
+
+~~~~~{.haskell}
+
+~~~~~
+
+And Hakyll will translate this to a relative URL for each page. This means we
+can host our site at `example.com` and `example.com/subdir` without changing a
+single line of code.
+
+More tutorials are in the works...
+
+Various tips and tricks
+-----------------------
+
+### Syntax highlighting
+
+Syntax highlighting is enabled by default in Hakyll. However, you also need to
+enable it in pandoc. If no syntax highlighting shows up, try
+
+ [jasper@phoenix] cabal install --reinstall -fhighlighting pandoc
+
+### When to rebuild
+
+If you execute a `./hakyll build`, Hakyll will build your site incrementally.
+This means it will be very fast, but it will not pick up _all_ changes.
+
+- In case you edited `hakyll.hs`, you first want to compile it again.
+- It is generally recommended to do a `./hakyll rebuild` before you deploy your
+ site.
+
+After rebuilding your site, all files will look as "modified" to the filesystem.
+This means that when you upload your site, it will usually transfer all files --
+this can generate more traffic than necessary, since it is possible that some
+files were not actually modified. If you use `rsync`, you can counter this using
+the `--checksum` option.
+
+Problems
+--------
+
+### regex-pcre dependency on Mac OS
+
+Hakyll requires [regex-pcre], which might fail to build on Mac OS. To solve
+this problem, make sure the [pcre] C library is installed (via homebrew or
+macports). Then install [regex-pcre] using:
+
+ cabal install --extra-include-dirs=/usr/local/include regex-pcre
+
+or
+
+ cabal install --extra-include-dirs=/opt/local/include regex-pcre
+
+...and proceed to install Hakyll the regular way.
+
+[regex-pcre]: http://hackage.haskell.org/package/regex-pcre
+[pcre]: http://www.pcre.org/
+
+### "File name does not match module name" on Mac OS
+
+ Hakyll.hs:1:1:
+ File name does not match module name:
+ Saw: `Main'
+ Expected: `Hakyll'
+
+Is an error encountered on Mac OS when `hakyll.hs` is located on a
+case-insensitive filesystem. A workaround is to rename it to something that
+isn't the name of the module, for example, `site.hs`.
--
cgit v1.2.3