import Data.List import Data.List.Utils (replace) import Data.Maybe (fromJust) import Distribution.Simple import Distribution.Simple.Setup main = defaultMainWithHooks simpleUserHooks { preBuild=preBuild' } preBuild' a b = compileStaticFiles >> preBuild simpleUserHooks a b compileStaticFiles :: IO () compileStaticFiles = mapM_ compileStaticFile [ "assets/Footnotes.js", "assets/Footnotes.css"] compileStaticFile :: FilePath -> IO () compileStaticFile filepath = do let out = replace "." "_" filepath ++ ".hs" let moduleName = takeWhile (/= '.') $ fromJust $ stripPrefix "assets/" out rawContent <- readFile filepath let escaped = (replace "\"" "\\\"" $ intercalate "\\n" $ lines rawContent) ++ "\\n" let variable = "content = \"" ++ escaped ++ "\"" let hsContent = "module " ++ moduleName ++ " where\n" ++ variable writeFile out hsContent