diff --git a/shake-ext.cabal b/shake-ext.cabal
--- a/shake-ext.cabal
+++ b/shake-ext.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.18
 name: shake-ext
-version: 2.10.0.0
+version: 2.11.0.0
 license: BSD3
 license-file: LICENSE
 copyright: Copyright: (c) 2018 Vanessa McHale
@@ -44,10 +44,11 @@
     ghc-options: -Wall
     build-depends:
         base >=4.11 && <5,
-        shake -any,
+        Cabal >=2.2,
         composition-prelude -any,
+        cpphs -any,
         directory -any,
-        Cabal >=2.2,
+        shake -any,
         template-haskell -any
     
     if flag(development)
diff --git a/src/Development/Shake/Literate.hs b/src/Development/Shake/Literate.hs
--- a/src/Development/Shake/Literate.hs
+++ b/src/Development/Shake/Literate.hs
@@ -3,16 +3,21 @@
 -- programs.
 module Development.Shake.Literate ( -- * Action
                                     illiterateA
+                                  , unlitA
                                   -- * Rules
                                   , literateHaskell
                                   , literateIdris
                                   , literateAlex
                                   , literateHappy
+                                  , literateAgda
                                   ) where
 
 import           Development.Shake
 import           Development.Shake.FilePath
+import           Language.Preprocessor.Unlit
 
+-- | This uses the [illiterate](https://github.com/vmchale/illiterate)
+-- preprocessor.
 illiterateA :: FilePath -- ^ Literate source file
             -> FilePath -- ^ Generated source
             -> Action ()
@@ -20,16 +25,27 @@
     (Stdout o) <- cmd ["lit", inF]
     liftIO $ writeFile outF o
 
+-- | This uses the 'unlit' function provided by the @cpphs@ package.
+unlitA :: FilePath -- ^ Literate source file
+       -> FilePath -- ^ Generated source
+       -> Action ()
+unlitA inF outF = liftIO (g =<< readFile inF)
+    where g = writeFile outF . unlit inF
+
 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
+            in unlitA out new
 
 -- | Rules for building @.lhs@ files.
 literateHaskell :: Rules ()
 literateHaskell = literateRules "hs"
+
+-- | Rules for building @.lagda@ files.
+literateAgda :: Rules ()
+literateAgda = literateRules "agda"
 
 -- | Rules for building @.lidr@ files.
 literateIdris :: Rules ()
