[GHC] #8776: Displaying pattern synonym for a GADT
GHC
ghc-devs at haskell.org
Tue Mar 11 11:23:11 UTC 2014
#8776: Displaying pattern synonym for a GADT
-------------------------------------+------------------------------------
Reporter: monoidal | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.7
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture: Unknown/Multiple
Type of failure: None/Unknown | Difficulty: Unknown
Test Case: | Blocked By:
Blocking: | Related Tickets:
-------------------------------------+------------------------------------
Comment (by simonpj):
Gergo writes (to ghc-devs):The problem is that the two type variables
occurring in the provided context both have "t" as their user-visible
name; even though the second one is projected as "t1" in the tau type on
the right-hand side.
The code to generate this output is in `HsBinds.ppr_sig`, using
`pprPatSynSig` which just adds the "pattern" keyword and the separating
"=>" symbols etc:
{{{
ppr_sig (PatSynSig name arg_tys ty prov req)
= pprPatSynSig (unLoc name) False args (ppr ty) (pprCtx prov) (pprCtx
req)
where
args = fmap ppr arg_tys
pprCtx lctx = case unLoc lctx of
[] -> Nothing
ctx -> Just (pprHsContextNoArrow ctx)
}}}
My guess is that the problem is `pprHsContextNoArrow` projects individual
constraints one-by-one and so doesn't notice the name clash on 't' between
the two constraints in the example; whereas 'ppr ty' walks the whole
right-hand tau type and thus has the opportunity to maintain a set of type
variable names used.
My question is, where is that logic, and how can I use that in this
instance? My hope is to be shown a design where I can run 'ppr ty',
'pprCtx prov' and 'pprCtx req' in the same "naming environment" (I hope
such a thing exists) so that they use a consistent naming scheme. This
looks like a problem that must have popped up at a lot of places in GHC
already and must have an idiomatic solution.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8776#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list