Tutorial: A Guide to the Hakyll Module Zoo
The hakyll package contains a bewildering array of modules, and it’s hard to know where to look when you are just getting started – especially since many of them are mostly just used by Hakyll internally and not that useful to website authors. This guide provides a quick reference to the contents of the most important and useful modules.
Core modules
These are the modules containing the fundamental tools and concepts you need to get started building a site with hakyll.
-
This is one of the modules you should look at first. It defines the fundamental
Compiler
type and primitiveCompiler
s as well as several variants onload
, which allow you to bring together multiple resources to create a single output. -
Specify where compiled items should go in the output site.
-
Specify which compilers and routes should be used on which resources. Also has combinators for versions (necessary if you want to use the same resources for multiple purposes).
Hakyll.Core.Identifier.Pattern
Combinators for creating patterns, i.e. predicates that pick out a set of resources: filesystem globs, explicit lists, regular expressions, and so on.
-
Provides functions for rendering your pages using pandoc, with a varying degree of high-levelness.
-
Templates specify how to take the content of an item and turn it into HTML output.
-
You can’t do much with a
Template
if you don’t have aContext
: this module provides some predefinedContext
s and the tools to build your own. -
The main
hakyll
function that runs the whole show. There is also ahakyllWith
function which allows for a custom configuration.
Pre-packaged solutions
These modules contain some “pre-packaged” solutions for common situations. They can be used as-is, or their source can be used as inspiration for your own tools.
-
Combine several pages into a list, such as a list of posts, images in a gallery, etc.
-
Create RSS feeds.
-
Work with tags and categories.
Useful utilities
-
Use any unix utility as a compiler.
-
A few utility functions for working with
String
s (trim spaces, find and replace, split on regexp).
Advanced customization
-
The
Writable
class is for resources which can be written to disk as part of the output site. You can specify how to write your own custom types to disk by giving them aWritable
instance.
Other tutorials
Find links to other tutorials.Documentation inaccurate or out-of-date? Found a typo?
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 feedback about the tutorials, and especially report errors or difficulties you encountered. If you have a github account, you can use the issue system. Thanks! If you run into any problems, all questions are welcome in the above google group, or you could try the IRC channel,#hakyll
on
irc.libera.chat (we do not have
a channel on Freenode anymore).