autoexporter: Automatically re-export modules.

[ library, mit, program, utility ] [ Propose Tags ]
This version is deprecated.

Autoexporter automatically re-exports modules.


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 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, 1.1.14, 1.1.15, 1.1.16, 1.1.17, 1.1.18, 1.1.19, 1.1.20, 2.0.0.1, 2.0.0.2, 2.0.0.3, 2.0.0.4, 2.0.0.5, 2.0.0.6, 2.0.0.7, 2.0.0.8, 2.0.0.9 (info)
Change log CHANGELOG.md
Dependencies autoexporter, base (>=4.7 && <4.9), directory (>=1.2 && <1.3), filepath (>=1.3 && <1.5) [details]
License MIT
Author
Maintainer Taylor Fausak
Category Utility
Source repo head: git clone https://github.com/tfausak/autoexporter
Uploaded by fozworth at 2016-02-21T20:33:30Z
Distributions LTSHaskell:2.0.0.9, NixOS:2.0.0.9, Stackage:2.0.0.9
Reverse Dependencies 4 direct, 1 indirect [details]
Executables autoexporter
Downloads 20016 total (96 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2016-02-21 [all 1 reports]

Readme for autoexporter-0.1.0

[back to package description]

Autoexporter

Autoexporter automatically re-exports Haskell modules.

Version badge

Install

  1. Install Stack.

  2. stack install autoexporter

Use

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:

  • Your source files must be rooted in a directory called library.

    • I will happily accept patches that lift this restriction. This is good enough for my purposes now, but it's pretty bad in general. The hard part of this problem is knowing when to stop when converting a file path into a module name. For example, how can we reliably convert /home/taylor/HSPackage/Data/Package.hs into Data.Package?
  • Absolutely nothing else can be in the source file. Autoexporter will blow up if it finds anything else.

  • 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.