@@ -33,6 +33,7 @@ module Hakyll.Core.Routes
34 , customRoute
34 , customRoute
35 , gsubRoute
35 , gsubRoute
38import Data.Monoid (Monoid, mempty, mappend)
39import Data.Monoid (Monoid, mempty, mappend)
@@ -112,3 +113,24 @@ gsubRoute :: String -- ^ Pattern
112 -> Routes -- ^ Resulting route
113 -> Routes -- ^ Resulting route
113gsubRoute pattern replacement = customRoute $
114gsubRoute pattern replacement = customRoute $
114 replaceAll pattern replacement . toFilePath
115 replaceAll pattern replacement . toFilePath
117+-- | Compose routes so that @f `composeRoutes` g@ is more or less equivalent
122+-- > let routes = gsubRoute "rss/" (const "") `composeRoutes` setExtension "xml"
123+-- > in runRoutes routes "tags/rss/bar"
127+-- > Just "tags/bar.xml"
129+-- If the first route given fails, Hakyll will not apply the second route.
131+composeRoutes :: Routes -- ^ First route to apply
132+ -> Routes -- ^ Second route to apply
133+ -> Routes -- ^ Resulting route
134+composeRoutes (Routes f) (Routes g) = Routes $ \i -> do
136+ g $ parseIdentifier p