Optionally exposed modules / APIs should be banned
- Ngôn ngữ chính
- Haskell
- Star
- 1.7k
- Fork
- 750
- Merge trung bình
- 4 ngày 3 giờ
- Pull request đã merge (30 ngày)
- 28
Mô tả
(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)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.
build-depends: gtk >= 0.9.11
exposed-modules: Graphics.Rendering.Chart.Gtk
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?
Hướng dẫn đóng góp
Đánh giá
Issue này chưa được đánh giá.