shake-ext-2.10.0.0: src/Development/Shake/Literate.hs
-- | Module containing functions for working with the
-- [illiterate](http://github.com/vmchale/illiterate) preprocessor for literate
-- programs.
module Development.Shake.Literate ( -- * Action
illiterateA
-- * Rules
, literateHaskell
, literateIdris
, literateAlex
, literateHappy
) where
import Development.Shake
import Development.Shake.FilePath
illiterateA :: FilePath -- ^ Literate source file
-> FilePath -- ^ Generated source
-> Action ()
illiterateA inF outF = do
(Stdout o) <- cmd ["lit", inF]
liftIO $ writeFile outF o
literateRules :: String -- ^ File extension
-> Rules ()
literateRules ext = pat %> g
where pat = "//*." <> ('l' : ext)
g out = let new = fst (splitExtension out) <> ('.' : ext)
in illiterateA out new
-- | Rules for building @.lhs@ files.
literateHaskell :: Rules ()
literateHaskell = literateRules "hs"
-- | Rules for building @.lidr@ files.
literateIdris :: Rules ()
literateIdris = literateRules "idr"
-- | Rules for building @.lx@ files
literateAlex :: Rules ()
literateAlex = literateRules "x"
-- | Rules for building @.ly@ files
literateHappy :: Rules ()
literateHappy = literateRules "y"