[GHC] #15898: Promoted type constructors don't print right in HsType
GHC
ghc-devs at haskell.org
Thu Nov 15 08:47:36 UTC 2018
#15898: Promoted type constructors don't print right in HsType
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone: 8.6.3
Component: Compiler | Version: 8.6.2
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
Consider this
{{{
ghci> import Data.Proxy
ghci> undefined :: '() -> Int
<interactive>:11:14: error:
• Expected a type, but ‘ '()’ has kind ‘()’
• In an expression type signature: '() -> Int
}}}
What is that strange space doing before the `'()`?
Similarly
{{{
undefined :: Proxy '() Int
<interactive>:12:14: error:
• Expected kind ‘* -> *’, but ‘Proxy '()’ has kind ‘*’
• In an expression type signature: Proxy '() Int
}}}
Again, the strange space.
It comes from the `HsType` pretty printer, which is worried
about printing the type
{{{
'['K]
}}}
That is, a promoted list with one element `K`. The trouble is that looks
like a character literal `'['`.
So we add an extra space, thus `'[ 'K]`. ''But we add it before every
promoded data constructor!" Hence the spurious spaces.
In `IfaceType` exactly the same thing happens, but we are more clever,
and only print the leading space if the promoted data con immediately
follows `'[` or `'(`. We should do the same thing for `HsType`.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15898>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list