@@ -4,7 +4,7 @@ module Text.Hakyll
44 , hakyllWithConfiguration
55 ) where
66
7−import Control.Monad.Reader (runReaderT)
7+import Control.Monad.Reader (runReaderT, liftIO)
88import Control.Monad (when)
99import qualified Data.Map as M
1010import System.Environment (getArgs, getProgName)
@@ -17,6 +17,8 @@ import Text.Hakyll.Hakyll
1717defaultHakyllConfiguration :: HakyllConfiguration
1818defaultHakyllConfiguration = HakyllConfiguration
1919 { additionalContext = M.empty
20+ , siteDirectory = "_site"
21+ , cacheDirectory = "_cache"
2022 }
2123
2224-- | Hakyll with a default configuration.
@@ -27,32 +29,27 @@ hakyll = hakyllWithConfiguration defaultHakyllConfiguration
2729hakyllWithConfiguration :: HakyllConfiguration -> Hakyll () -> IO ()
2830hakyllWithConfiguration configuration buildFunction = do
2931 args <- getArgs
30− case args of ["build"] -> build'
31− ["clean"] -> clean
32− ["preview", p] -> build' >> server (read p)
33− ["preview"] -> build' >> server 8000
34− ["server", p] -> server (read p)
35− ["server"] -> server 8000
36− _ -> help
37− where
38− build' = build configuration buildFunction
39−
40−-- | Build the site.
41−build :: HakyllConfiguration -> Hakyll () -> IO ()
42−build configuration buildFunction = do putStrLn "Generating..."
43− runReaderT buildFunction configuration
32+ let f = case args of ["build"] -> buildFunction
33+ ["clean"] -> clean
34+ ["preview", p] -> buildFunction >> server (read p)
35+ ["preview"] -> buildFunction >> server 8000
36+ ["server", p] -> server (read p)
37+ ["server"] -> server 8000
38+ _ -> help
39+ runReaderT f configuration
4440
4541-- | Clean up directories.
46−clean :: IO ()
47−clean = remove' "_site"
42+clean :: Hakyll ()
43+clean = do askHakyll siteDirectory >>= remove'
44+ askHakyll cacheDirectory >>= remove'
4845 where
49− remove' dir = do putStrLn $ "Removing " ++ dir ++ "..."
50− exists <- doesDirectoryExist dir
51− when exists $ removeDirectoryRecursive dir
46+ remove' dir = liftIO $ do putStrLn $ "Removing " ++ dir ++ "..."
47+ exists <- doesDirectoryExist dir
48+ when exists $ removeDirectoryRecursive dir
5249
5350-- | Show usage information.
54−help :: IO ()
55−help = do
51+help :: Hakyll ()
52+help = liftIO $ do
5653 name <- getProgName
5754 putStrLn $ "This is a Hakyll site generator program. You should always\n"
5855 ++ "run it from the project root directory.\n"
@@ -64,5 +61,5 @@ help = do
6461 ++ name ++ " preview [port] Generate site, then start a server.\n"
6562 ++ name ++ " server [port] Run a local test server.\n"
6663
67−server :: Integer -> IO ()
68−server p = simpleServer (fromIntegral p) "_site"
64+server :: Integer -> Hakyll ()
65+server p = askHakyll siteDirectory >>= liftIO . simpleServer (fromIntegral p)