haskell / haskell/cabal

Optionally exposed modules / APIs should be banned

Open
#778 0 comments 0 reactions 0 assignees View on GitHub
Cabal: other type: bug
Dominant language
Haskell
Stars
1.7k
Forks
750
Avg merge
4d 3h
Merged PRs (30d)
28

Description

(Imported from [Trac #788](http://hackage.haskell.org/trac/hackage/ticket/788), reported by @dcoutts on 2011-01-11)

It is a deliberate decision that packages cannot depend on package + flag combinations, only on packages. The point is that flags are not supposed to change the API of a package.

This needs to be enforced.

Consider a real example (from Chart package: [http://hackage.haskell.org/packages/archive/Chart/0.14/Chart.cabal](http://hackage.haskell.org/packages/archive/Chart/0.14/Chart.cabal))

  if flag(gtk)

build-depends: gtk >= 0.9.11
exposed-modules: Graphics.Rendering.Chart.Gtk
The criterion package depends on Chart and imports Graphics.Rendering.Chart.Gtk meaning that it breaks if you build Chart with the gtk flag turned off.

The solution is that Chart should be prevented from conditionally exposing modules. We should add a QA check that looks for exposed modules that are conditional on a flag. It is annoying but somewhat less bad for modules to change between platforms.

Should it be a hard failure or just a warning?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.