module Development.Shake.Clean ( cleanProducts
                               , cleanHaskell
                               ) where

import           Data.Foldable
import           Development.Shake hiding ((*>))

-- | 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 =
    traverse_ (\p -> removeFilesAfter p ["//*"])
        [ "dist", "dist-newstyle", ".stack-work", ".cabal-sandbox" ] *>
    removeFilesAfter "."
        ["//*.o", "//*.ghc.*", "//*_stub.h", "//*.hi", "//*.dyn_o", "//*.p_o", "//*.dyn_hi", "//*.p_hi", "//*.hc", "//*.haddock", "cabal.sandbox.config"]