[GHC] #11319: ImpredicativeTypes even more broken than usual
GHC
ghc-devs at haskell.org
Mon Aug 28 13:53:57 UTC 2017
#11319: ImpredicativeTypes even more broken than usual
-------------------------------------+-------------------------------------
Reporter: Iceland_jack | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler (Type | Version: 7.11
checker) | Keywords:
Resolution: | ImpredicativeTypes
Operating System: Linux | Architecture:
| Unknown/Multiple
Type of failure: GHC rejects | Test Case:
valid program | typecheck/should_compile/T11319
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by RyanGlScott):
Since this ticket was originally opened, SPJ started a
[https://mail.haskell.org/pipermail/ghc-devs/2016-September/012940.html
very relevant discussion] on the GHC devs mailing list about a way to
salvage `ImpredicativeTypes`. It wouldn't make the original program in
this ticket typecheck again, but it would provide a way to possibly
suggest a workaround in error messages.
To quote SPJ:
> When you have `-XImpredicativeTypes`
>
> * You can write a polytype in a visible type argument; eg. `f @(forall
a. a->a)`
>
> * You can write a polytype as an argument of a type in a signature e.g.
`f :: [forall a. a->a] -> Int`
>
> And that’s all. A unification variable STILL CANNOT be unified with a
polytype. The only way you can call a polymorphic function at a polytype
is to use Visible Type Application.
>
> So using impredicative types might be tiresome. E.g.
>
> {{{#!hs
> type SID = forall a. a->a
>
>
>
> xs :: [forall a. a->a]
>
> xs = (:) @SID id ( (:) @SID id ([] @ SID))
> }}}
>
> In short, if you call a function at a polytype, you must use VTA.
Simple, easy, predictable; and doubtless annoying. But possible.
However, this should undoubtedly go through a GHC proposal. At the very
least, it's unclear to me whether SPJ's intention was to require actually
enabling `-XImpredicativeTypes` in order to visibly apply a polytype (the
title of the GHC devs discussion, "Getting rid of `-XImpredicativeTypes`",
makes me think "no", but the actual contents of the discussion that I
quoted would suggest "yes").
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11319#comment:11>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list