[ghc-steering-committee] Proposal: Syntax for visible dependent quantification (#81)

Richard Eisenberg rae at cs.brynmawr.edu
Thu Dec 21 14:15:03 UTC 2017


These are good suggestions. Thanks. While I'm writing all these proposals, it's about time I introduce pi proper -- the proposal for pi can go further than reserve syntax, because there are already places in the language that support real pi-types (the kinds of type families [assuming #54 is accepted] and the kinds of datatypes).

I'll put together yet another proposal. :)

Regardless, I don't want to shut down debate on this proposal in isolation. In particular, I'd love new syntax suggestions, as I agree that the proposed syntax is a little subtle.

Thanks,
Richard

> On Dec 20, 2017, at 3:35 PM, Roman Leshchinskiy <rleshchinskiy at gmail.com> wrote:
> 
> Hi everyone,
> 
> The proposal is about adding support for dependent quantification to
> kind signatures:
> 
>  https://github.com/ghc-proposals/ghc-proposals/pull/81
> 
> Consider the following declaration (example lifted from the proposal):
> 
>  data T k (a :: k)
> 
> GHC accepts this but it can't be given an explicit kind. Internally,
> it is assigned a kind which is rendered as
> 
>  forall k -> k -> *
> 
> but this isn't accepted in source code. Note that in applications of
> T, k must be specified explicitly (e.g., T Type Int) which is why T
> does *not* have the kind
> 
>  forall k. k -> *
> 
> Moreover, k is mentioned later in the kind which is why something like
> Type -> k -> * doesn't work, either.
> 
> The proposal is to allow forall k -> k -> * and similar kinds to
> appear in source code.
> 
> This is actually intended as the first in a series of proposals
> driving us towards dependent types in Haskell as described in
> Richard's thesis
> (https://www.cis.upenn.edu/~sweirich/papers/eisenberg-thesis.pdf).
> Ultimately, the intention is to have all of the following (cf. Chapter
> 4 of the thesis):
> 
>  forall a. t
>  forall a -> t
>  pi a. t
>  pi a -> t
> 
> Here, forall and pi express relevance (does it exist at runtime) and .
> and -> express visibility (does it have to be specified explicitly).
> 
> Because of this, my recommendation is to strongly encourage the author
> to submit an extended proposal which reserves (but doesn't specify the
> semantics of) the above syntax wholesale.
> 
> This would allow us to ensure that various bits of Dependent Haskell
> use consistent syntax and language extensions once implemented. I find
> it quite difficult to discuss just this specific bit of syntax in
> isolation. Indeed, the public discussion was rather confused without
> an explanation of the roadmap
> (https://github.com/ghc-proposals/ghc-proposals/pull/81#issuecomment-336892922).
> 
> Alternatively, we could just agree on the roadmap ourselves, without
> public discussion. This would somewhat circumvent the process, though.
> 
> If we decide to discuss just the proposal as is, though, then I'd be
> weakly against the proposed syntax as it is too subtle for my taste
> and abuses familiar mathematical notation somewhat. I'd probably
> prefer something like:
> 
>  type a -> t
> 
> The proposal also doesn't specify what language extension would turn
> on support for the syntax so this would have to be rectified.
> 
> Thanks,
> 
> Roman
> _______________________________________________
> ghc-steering-committee mailing list
> ghc-steering-committee at haskell.org
> https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee



More information about the ghc-steering-committee mailing list