module Development.Shake.Literate (
illiterateA
, unlitA
, literateHaskell
, literateIdris
, literateAlex
, literateHappy
, literateAgda
) where
import Development.Shake
import Development.Shake.FilePath
import Language.Preprocessor.Unlit
illiterateA :: FilePath
-> FilePath
-> Action ()
illiterateA inF outF = do
(Stdout o) <- cmd ["lit", inF]
liftIO $ writeFile outF o
unlitA :: FilePath
-> FilePath
-> Action ()
unlitA inF outF = liftIO (g =<< readFile inF)
where g = writeFile outF . unlit inF
literateRules :: String
-> Rules ()
literateRules ext = pat %> g
where pat = "//*." ++ ('l' : ext)
g out = let new = fst (splitExtension out) ++ ('.' : ext)
in unlitA out new
literateHaskell :: Rules ()
literateHaskell = literateRules "hs"
literateAgda :: Rules ()
literateAgda = literateRules "agda"
literateIdris :: Rules ()
literateIdris = literateRules "idr"
literateAlex :: Rules ()
literateAlex = literateRules "x"
literateHappy :: Rules ()
literateHappy = literateRules "y"