[GHC] #10143: Separate PprFlags (used by Outputable) from DynFlags
GHC
ghc-devs at haskell.org
Wed May 18 22:37:12 UTC 2016
#10143: Separate PprFlags (used by Outputable) from DynFlags
-------------------------------------+-------------------------------------
Reporter: ezyang | Owner: ezyang
Type: task | Status: new
Priority: normal | Milestone:
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: #10961 | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by dalaing):
I've just been bringing everything used by the the pretty printer across
from `DynFlags` into `PprFlags` up to this point.
I agree that `PprFlags` isn't a great place for `PlatformConstants`, but
at the moment the pretty printing code uses `PlatformConstants` (via the
Outputable instances for Cmm, amongst others), so it seems like it is
needed for this kind of direct translation (unless I'm misssing something
here).
At the moment the Cmm code in questions takes a `DynFlags` as an argument,
solely to use the `PlatformConstants` contained within `DynFlags`.
I've recently been playing with a `HasPlatformConstants` typeclass, with
instances for `DynFlags` and `PprFlags`, since there are a few utility
functions around the place that make of `PlatformConstants` via a
`DynFlags` and may not be so easy to change. If `targetPlatform` joins
that class it would open some other doors.
Although that might be digging too far down the wrong rabbit hole.
The separation of `PprFlags` from `DynFlags` also means that
`sdocWithDynFlags` becomes `sdocWtihPprFlags`, and for some of the
`Outputable` instances those flags are the only way they have access to
certain kinds of information.
That makes `PprFlags` into a bottleneck by which various Outputable
instances gather information they need (including which of certain flags
are on, which of certains extensions are enabled). It'd be nice to be
able to address that.
@ezyang mentioned in IRC that it might be easier to add another typeclass
like `Outputable` but with access to `DynFlags`. I'll probably have a
look at that next, but I'm worried that the work required to thread the
`DynFlags` to where they are needed might be a neutral or net negative
move. It would be nice to not have a random handful of flags and
extensions in `PprFlags` though, so I'll definitely give it a go.
In the short-term I'm focusing on getting everything but the Cmm code
working, after which I'll give `OutputableWithDyn` a go.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10143#comment:9>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list