
#10970: Built in MIN_VERSION macro support -------------------------------------+------------------------------------- Reporter: ezyang | Owner: Type: feature request | Status: new Priority: normal | Milestone: 8.0.1 Component: Compiler | Version: 7.11 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1349, Wiki Page: | Phab:D1869 -------------------------------------+------------------------------------- Comment (by rwbarton): Replying to [comment:12 hvr]:
Replying to [comment:3 rwbarton]:
[...] I don't understand any more why it should be the case that we only create these macros for packages explicitly specified with `-package` or equivalent.
Well, if you `-hide-all-packages` and unmask a few packages via `-package`, then exposing macros for all other packages in the package database would be very unsound, as it would destroy modularity.
I was unclear in comment:3. I thought I was pretty clear in comment:7, but let me try again. For a given compilation, after processing all package-related flags and environment variables, and reading in all package databases, GHC selects some set of installed packages, called the exposed packages. These are the packages that GHC will use to satisfy import statements. My proposal is simply: define `MIN_VERSION_x` macros for exactly the exposed packages. If you can import it, then you can check its version too. So, if you `-hide-all-packages` and unmask a few packages via `-package`, you'd only get `MIN_VERSION_x` macros for those packages you exposed with `-package`. The modularity concerns that Cabal addresses for imports then extend directly to `MIN_VERSION_x` macros. In Cabal, you need to state your dependency on a module to import it. So, you need to state your dependency on a module to check its version with `MIN_VERSION_x`, too. No need to reason explicitly about `-hide-all-packages` and `-package` flags to arrive at this result. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10970#comment:13 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler