[GHC] #15359: Quantified constraints do not work with equality constraints
GHC
ghc-devs at haskell.org
Sun Jul 15 07:54:40 UTC 2018
#15359: Quantified constraints do not work with equality constraints
-------------------------------------+-------------------------------------
Reporter: goldfire | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone: 8.6.1
Component: Compiler | Version: 8.5
Resolution: | Keywords:
| QuantifiedConstraints
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by AntC):
Replying to [comment:11 goldfire]:
>> ... I neither know a good pithy way of explaining that
I can't see even a convoluted explanation: it seems an arbitrary
restriction. (Perhaps Simon is just being conservative with a new
feature?)
1. Why is `~` banned, but not `Coercible` (or a user-written coercion
class)?
2. In the 'FDs through CHRs' paper all of the improvement rules are in the
form of a constraint implying an equality.
3. Richard's suggestion of a Closed Type Family (in a `~` superclass
constraint -- which is a standard idiom) just is exactly what seems to be
banned:
{{{
class (F a b ~ c) -- there's the Eq constraint
=> D a b c where ...
type family F a b where
F blah1 blah2 = blah3 -- take '=' from left to right, so it's an
implication
F a (T a b') = (... b' ...) -- repeated tyvars on lhs is an '~' test
-- local-scoped tyvar b' is quantified
}}}
"just is"? Well, no: I've had to chop up the logic and find a name for it
and spread it round the program text.
> Previously, Simon was worried that the equality constraints would always
be redundant.
Hmm. Maybe redundant in the sense if you draw all the bits back together,
the type equalities are entailed. But in the general case (such as my
`And` example) that needs closed-world reasoning: closed Kinds; closed
sets of instances. Which I don't expect GHC to even try.
> I think that's still true in your examples, but with a key twist: the
equality constraints can be used for improvement during type checking.
That may indeed be correct.
>
There's a risk of non-termination. But GHC entertains that already with
`UndecidableInstances` and/or `UndecidableSuperClasses`. I think we could
work up [https://github.com/ghc-proposals/ghc-proposals/pull/114 a
proposal for that].
In the language of the 'FDs through CHRs' paper, we must make sure all
quantification is 'range restricted'.
> As a practical matter though, I can't imagine how to implement them.
And, given the fact that we have many ways of expressing these ideas
already, without quantified equality constraints, (for example, your
`ElimElem` could be implemented as a closed type family), I'm not yet
motivated to start thinking about how to write a solver than can deal with
these.
Isn't "many ways" actually a problem here? Too many similar-but-subtly-
different ways. And specifically Type Families are out of favour
[https://github.com/ghc-proposals/ghc-
proposals/pull/114#issuecomment-372124549 for certain purposes] (see re
'lens example' -- chop up the program logic, repeat it around the program,
find a name for it; I think that also swayed the decision on
records/`HasField` class to use FunDeps rather than TFs).
Simon's (quite rightly) always looking for underpinning rationalisations
that "allows us to simplify the language by (say) deprecating or removing
features". Haskell has had a problem since at least 1997; didn't get fixed
in H98; didn't get fixed in H2010; unlikely to get resolved for H2020:
that we'd like to 'bless' MPTCs; but then we'd need to bless FunDeps
and/or Type Families; but then we'd have to deal with overlaps/Closed TFs.
All of them have an underlying type improvement logic, which is a 'local'
implication constraint with equalities.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15359#comment:12>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list