| Safe Haskell | Safe-Infered |
|---|
Hakyll.Core.Routes
Description
Once a target is compiled, the user usually wants to save it to the disk.
This is where the Routes type comes in; it determines where a certain
target should be written.
Suppose we have an item foo/bar.markdown. We can render this to
foo/bar.html using:
route "foo/bar.markdown" (setExtension ".html")
If we do not want to change the extension, we can use idRoute, the simplest
route available:
route "foo/bar.markdown" idRoute
That will route foo/bar.markdown to foo/bar.markdown.
Note that the extension says nothing about the content! If you set the
extension to .html, it is your own responsibility to ensure that the
content is indeed HTML.
Finally, some special cases:
- If there is no route for an item, this item will not be routed, so it will not appear in your site directory.
- If an item matches multiple routes, the first rule will be chosen.
- data Routes
- runRoutes :: Routes -> Identifier a -> Maybe FilePath
- idRoute :: Routes
- setExtension :: String -> Routes
- matchRoute :: Pattern a -> Routes -> Routes
- customRoute :: (Identifier a -> FilePath) -> Routes
- gsubRoute :: String -> (String -> String) -> Routes
- composeRoutes :: Routes -> Routes -> Routes
Documentation
A route that uses the identifier as filepath. For example, the target with
ID foo/bar will be written to the file foo/bar.
setExtension :: String -> RoutesSource
Set (or replace) the extension of a route.
Example:
runRoute (setExtension "html") "foo/bar"
Result:
Just "foo/bar.html"
Example:
runRoute (setExtension "html") "posts/the-art-of-trolling.markdown"
Result:
Just "posts/the-art-of-trolling.html"
matchRoute :: Pattern a -> Routes -> RoutesSource
Apply the route if the identifier matches the given pattern, fail otherwise
customRoute :: (Identifier a -> FilePath) -> RoutesSource
Create a custom route. This should almost always be used with
matchRoute
Create a gsub route
Example:
runRoutes (gsubRoute "rss/" (const "")) "tags/rss/bar.xml"
Result:
Just "tags/bar.xml"
Compose routes so that f is more or less equivalent
with composeRoutes gf >>> g.
Example:
let routes = gsubRoute "rss/" (const "") `composeRoutes` setExtension "xml" in runRoutes routes "tags/rss/bar"
Result:
Just "tags/bar.xml"
If the first route given fails, Hakyll will not apply the second route.