autoexporter: Automatically re-export modules.

[ library, mit, program, utility ] [ Propose Tags ]

Autoexporter automatically re-exports modules.

[Skip to Readme]
Versions [faq] 0.1.0, 0.1.1, 0.1.2, 0.1.4, 0.2.0, 0.2.1, 0.2.2, 0.2.3, 1.0.0, 1.1.0, 1.1.1, 1.1.2, 1.1.3, 1.1.4, 1.1.7, 1.1.9, 1.1.10, 1.1.11, 1.1.13 (info)
Change log
Dependencies autoexporter, base (>=4.7 && <4.9), Cabal (==1.22.*), directory (==1.2.*), filepath (>=1.3 && <1.5) [details]
License MIT
Maintainer Taylor Fausak
Category Utility
Home page
Bug tracker
Source repo head: git clone
Uploaded by fozworth at Fri Apr 15 13:28:53 UTC 2016
Distributions LTSHaskell:1.1.13, NixOS:1.1.13, Stackage:1.1.13
Executables autoexporter
Downloads 9305 total (187 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs not available [build log]
All reported builds failed as of 2016-11-26 [all 2 reports]


  • Autoexporter


Maintainer's Corner

For package maintainers and hackage trustees

Readme for autoexporter-0.2.0

[back to package description]


Autoexporter automatically re-exports Haskell modules.

Version badge Build badge


  1. Install Stack.

  2. stack install autoexporter


Let's say you have a module M that just exports some other modules. It might look like this:

module M
    ( module M.A
    , module M.B
    ) where

import M.A
import M.B

This code is error-prone. If you add a new module, say M.C, you have to remember to come back to this file and re-export it. And this code is tedious to write. You have to list each module twice. You can do a little better, but not much.

module M (module X) where
import M.A as X
import M.B as X

Now you don't have to write every module twice, but you still have to remember to re-export everything. And the generated documentation for this module doesn't include anything about the exported modules.

Autoexporter handles this for you. Instead of either of the above approaches, simply drop this into the M module:

{-# OPTIONS_GHC -F -pgmF autoexporter #-}

That will generate code like the first example. A couple caveats:

  • Only immediate children will be re-exported. If you use this in some module M, it won't pull in M.A.B.

  • You cannot selectively leave out any modules. You also cannot selectively exclude any imports from any of the modules.

    • This could be allowed via -optF. I will happily accept patches for this as well.