[ghc-steering-committee] Quick look impredicativity (#274) — recommendation: accept
Spiwack, Arnaud
arnaud.spiwack at tweag.io
Mon Oct 14 06:53:34 UTC 2019
Dear all,
As the title implies: I'm hereby recommending accepting the Quick look
impredicativity proposal.
Summary:
The proposal modifies the `-XImpredicativeTypes` extension with a well
defined semantics which consists in considering n-ary applications, rather
than binary. And look, in such an application, for arguments which
absolutely require impredicative instantiation (either universally
quantified type applications, or arguments where a universal type is
guarded by an invariant type constructor).
In order to have the expected behaviour for `($)` and `(.)`, the proposal
also makes the left-hand argument of the arrow invariant with respect to
instantiation (currently: contravariant). The proposal is to make this
change effective, even if `-XRankNTypes` is turned on, but not
`-XImpredicativeTypes`. The proposal also introduces an extension
`-XContravariantFunctions` to restore the old behaviour, for compatibility.
Rational:
`-XImpredicativeTypes` is a useful extension which is currently in a rather
sad state. I'm happy to see it stabilise to a clear semantics. The
semantics in the proposal covers a ton of use cases. It strikes a very good
balance between usefulness and predictability.
The use of n-ary application in the type system also has good theoretical
roots: sequent calculi have n-ary applications. (in manyrespects,
bidirectional type systems are also about n-ary application). So I don't
consider it a wart at all.
The propsal's semantics, including the absence of contravariant functions,
goes in the direction of _guessing less things_. This is a direction that
many GHC features have taken lately. I think it's a very very good
direction! Guessing can be damaging for predictability, but. more
importantly, guessing has a tendency to compose badly with other typing
features. (it is to be noted, too, that the implementation of contravariant
functions. in GHC, eta-expands the function, which can casually change its
semantics, if the function was bottom).
So, everything in this proposal does look good to me, except that, I think,
I would like a deprecation route for the `-XContravariantFunctions`
extension. Otherwise, we will be stuck with legacy code forever.
Best,
Arnaud
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-steering-committee/attachments/20191014/7ca62e31/attachment.html>
More information about the ghc-steering-committee
mailing list