Tool for detecting redundant Cabal package dependencies

LTS Haskell 9.5:0.1.2
Stackage Nightly 2017-07-25:0.1.2
Latest on Hackage:0.1.2
BSD3 licensed by Herbert Valerio Riedel
Maintained by Herbert Valerio Riedel

Module documentation for 0.1.2

There are no documented modules for this package.

This simple CLI tool allows to find out which of the packages listed as build-depends in a Cabal package description file are redundant.

packunused works by taking advantage of GHC's -ddump-minimal-imports feature which creates .import files for each compiled module containing a minimal set of explicit import declarations. These .import files together with Cabal's generated package configuration meta-data is analyzed by packunused to detect potentially redundant package dependencies.

In order to use packunused you have to configure the package as usual. See the example session below:

cabal clean
rm *.imports
cabal configure -O0 --disable-library-profiling
cabal build --ghc-option=-ddump-minimal-imports

Experimental support for stack:

stack setup --upgrade-cabal  # necessary only when stack's global Cabal installation is out of date
stack clean
stack build --ghc-options '-ddump-minimal-imports -O0'

The -O0 --disable-library-profiling options are just to speed up compilation. In some cases you might want to pass additional options to the configure step, such as --enable-benchmark or --enable-tests.

When run, packunused prints a report to standard output listing its findings for each component built. The following is an example for the packunused package itself, with a redundant dependency added for demonstration on purpose:

detected package components

 - executable(s): packunused

(component names suffixed with '*' are not configured to be built)


The following package dependencies seem redundant:

 - criterion-



  • Add support for Cabal-1.24 (and drop support for previous Cabal versions)
  • Add experimental support for Stack

  • Add support for Cabal-1.22.* and base-4.8.*

  • Allow optparse-applicative-0.11.* and haskell-src-exts-1.16.*

  • New option --ignore-package to white-list redundant packages by name
  • Exit with a non-zero status code if (non-ignored) redundant dependencies are found
  • Fake support for parsing -XSafeHaskell and -XExplicitNamespaces in .imports files
  • Switched from cmdargs to optparse-applicative

  • Minor typo in output messages fixed

  • Update to support Cabal-1.18/Cabal-1.20, GHC 7.8.1+, and haskell-src-exts-1.15

  • Add support for haskell-src-exts-1.14.0

  • Initial release
comments powered byDisqus