{-# 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 route "css/*" idRoute compile "css/*" compressCssCompiler -- Render posts route "posts/*" $ setExtension ".html" compile "posts/*" $ pageCompiler >>> applyTemplateCompiler "templates/post.html" >>> applyTemplateCompiler "templates/default.html" >>> relativizeUrlsCompiler -- Render posts list route "posts.html" $ idRoute create "posts.html" $ constA mempty >>> arr (setField "title" "All posts") >>> requireAllA "posts/*" addPostList >>> applyTemplateCompiler "templates/posts.html" >>> applyTemplateCompiler "templates/default.html" >>> relativizeUrlsCompiler -- Index route "index.html" $ 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 route "rss.xml" $ idRoute create "rss.xml" $ requireAll_ "posts/*" >>> renderRss feedConfiguration -- Read templates compile "templates/*" templateCompiler -- End return () -- | 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" }