Permalink
Fetching contributors…
Cannot retrieve contributors at this time
executable file 51 lines (45 sloc) 1.48 KB
#!/usr/local/bin/runhaskell
import Text.Hastache
import Text.Hastache.Context
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.IO as TL
import System.Process (readProcess)
import System.Directory (setCurrentDirectory, getCurrentDirectory)
import System.FilePath ((</>))
import Data.List (span, lines, intersperse)
import Data.Char (isSpace)
main = do
res <- hastacheFile defaultConfig "README.md.ha"
(mkStrContext context)
TL.writeFile "README.md" res
where
context "example" = MuLambdaM $ \fn -> do
cd <- setExampleDir
fc <- readFile $ exampleFile fn
let { forTC = case span (\t -> trim t /= be) (lines $ trim fc) of
(a,[]) -> a
(_,a) -> drop 1 a }
let explText = concat $ intersperse "\n" forTC
setCurrentDirectory cd
return $ concat [
"```haskell\n"
, explText
, "\n```"
]
context "runExample" = MuLambdaM $ \fn -> do
cd <- setExampleDir
explRes <- readProcess "runhaskell" [exampleFile fn] []
setCurrentDirectory cd
return $ concat [
"```\n"
, trim explRes
, "\n```"
]
be = "-- begin example"
setExampleDir = do
cd <- getCurrentDirectory
setCurrentDirectory $ cd </> "examples"
return cd
exampleFile fn = decodeStr fn ++ ".hs"
trim :: String -> String
trim = f . f where f = reverse . dropWhile isSpace