diff --git a/shake-ext.cabal b/shake-ext.cabal
--- a/shake-ext.cabal
+++ b/shake-ext.cabal
@@ -1,5 +1,5 @@
 name:                shake-ext
-version:             1.4.0.9
+version:             1.5.0.0
 synopsis:            Helper functions for linting with shake 
 description:         This package provides several linters out of the box, as well as functionality for building ATS source files with [shake](http://shakebuild.com/).
 homepage:            https://hub.darcs.net/vmchale/shake-ext
@@ -25,6 +25,7 @@
                      , Development.Shake.Linters
                      , Development.Shake.Man
                      , Development.Shake.Check
+                     , Development.Shake.Clean
   build-depends:       base >= 4.10 && < 5
                      , shake
                      , language-ats >= 0.1.1.3
diff --git a/src/Development/Shake/Clean.hs b/src/Development/Shake/Clean.hs
new file mode 100644
--- /dev/null
+++ b/src/Development/Shake/Clean.hs
@@ -0,0 +1,16 @@
+module Development.Shake.Clean where
+
+import           Development.Shake
+
+-- | Clean generic products (@.o@, @.so@, @.a@).
+cleanProducts :: Action ()
+cleanProducts = removeFilesAfter "." ["//*.so", "//*.o", "//*.a"]
+
+-- | Clean directories and file extensions typically associated w/ Haskell
+-- builds
+cleanHaskell :: Action ()
+cleanHaskell =
+    mapM_ (\p -> removeFilesAfter p ["//*"])
+        [ "dist", "dist-newstyle", ".stack-work", ".cabal-sandbox", "ats-deps" ] >>
+    removeFilesAfter "."
+        ["//*.o", "//*_stub.h", "//*.hi", "//*.dyn_o", "//*.p_o", "//*.dyn_hi", "//*.p_hi", "//*.hc", "cabal.sandbox.config"]
