[GHC] #12389: Limit duplicate export warnings for datatypes
GHC
ghc-devs at haskell.org
Wed Jul 13 20:45:12 UTC 2016
#12389: Limit duplicate export warnings for datatypes
-------------------------------------+-------------------------------------
Reporter: dfeuer | Owner:
Type: feature | Status: new
request |
Priority: normal | Milestone: 8.2.1
Component: Compiler | Version: 7.10.3
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: Incorrect
Unknown/Multiple | warning at compile-time
Test Case: | Blocked By:
Blocking: | Related Tickets: #11959
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
`containers` sometimes exports data constructors/patterns conditionally
(depending on GHC version and whether `TESTING` is defined). Presently, to
avoid a duplicate export warning, it's necessary to write a separate
export line for each combination of exported constructors, which is
horrible:
{{{#!hs
module Foo (
#ifdef TESTING
#ifdef USE_PATTERN_SYNONYMS
Foo (Foo, Pat1, Pat2)
#else
Foo (Foo)
#endif
#elif USE_PATTERN_SYNONYMS
Foo (Pat1, Pat2)
#else
Foo
#endif
}}}
or to break up the lines with CPP, which is so horrible I can't even bring
myself to write it.
I'd much rather be able to write
{{{#!hs
module Foo (
Foo
#ifdef TESTING
,Foo(Foo)
#endif
#ifdef USE_PATTERN_SYNONYMS
,Foo(Pat1, Pat2)
#endif
)
}}}
The trouble here is that GHC warns about duplicate export of the type
`Foo`. I think there's a pretty simple partial solution: only warn about a
type export that is *completely* redundant, adding neither type
constructor nor pattern. And offer a way to turn off the redundant export
warning entirely for types and classes without turning it off for
bindings.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12389>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list