[GHC] #14860: QuantifiedConstraints: Can't quantify constraint involving type family
GHC
ghc-devs at haskell.org
Sat Nov 24 19:07:55 UTC 2018
#14860: QuantifiedConstraints: Can't quantify constraint involving type family
-------------------------------------+-------------------------------------
Reporter: RyanGlScott | Owner: (none)
Type: bug | Status: closed
Priority: normal | Milestone:
Component: Compiler (Type | Version: 8.5
checker) | Keywords:
Resolution: wontfix | QuantifiedConstraints
Operating System: Unknown/Multiple | Architecture:
Type of failure: GHC rejects | Unknown/Multiple
valid program | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by goldfire):
I agree with comment:19. Depending on how you read it, the rule is this:
* You cannot mention locally quantified variables in the arguments to a
type family.
where "locally quantified" is meant to refer to the quantification in a
quantified constraint. My "depending on how you read it" is about the fact
that `b` isn't really an argument to type family `T` in `T a b`. Instead,
`a` is the only argument to `T`, and `b` is an argument to the reduct of
`T a`. This is pedantic, but I think it's a healthy way to understand
what's going on.
I also want to back Simon up in his refusal to allow locally quantified
variables in arguments to type families: the problem is all about
backtracking. See my comment:6, which spells trouble.
I don't think the more nuanced rule described in comment:19 and here will
be hard to implement. The flattener already treats the `a` and `b` in `T a
b` quite differently. See the difference between `flatten_fam_app` and
`flatten_exact_fam_app_fully`. The former takes `T a b` and decomposes to
pass only `T a` to the latter.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14860#comment:20>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list