[ghc-steering-committee] Proposal #402 (changes to GADT syntax); rec: accept

Eric Seidel eric at seidel.io
Sat Mar 20 02:16:22 UTC 2021


My intuition behind GADT syntax has always been that it looks like type syntax because sometimes we really just want to write down the constructor's type. The original motivation was to let us specify the result type, but this proposal gives us another reason around controlling the placement of foralls.

If GADT signatures are supposed to feel like types, then we should seek to minimize the differences. That would mean keeping optional parens and allowing control over the placement of foralls. Iavor's example of type synonyms is another inconsistency that doesn't seem to be motivated by a technical reason.

On the other hand, if we want to convey that GADTs signatures are not types, then we should not reuse the `->`. We could instead write something like

  data T a where
    C1 Int :: T Int
    C2 !Bool :: T Bool
    C3 { a :: Int, b :: !Bool } :: T (Int, Bool)

Those signatures are very clearly not types.

Eric

On Fri, Mar 19, 2021, at 14:38, Richard Eisenberg wrote:
> 
> 
> > On Mar 19, 2021, at 12:18 PM, Iavor Diatchki <iavor.diatchki at gmail.com> wrote:
> > 
> >    type T = Int -> S
> >    data S where C :: T
> 
> It's true that this doesn't work today -- and that there are no plans 
> for something like that working. If we were clearer that constructor 
> signatures weren't types, then this case would be easier to understand. 
> Perhaps this is why I'm in favor of dropping the parentheses; allowing 
> them is actually an  exception to the general rule here. (The general 
> rule: the thing after the :: is a `->`-separated list of arguments, 
> terminated by the return type.)
> 
> Richard
> 
> 
> _______________________________________________
> ghc-steering-committee mailing list
> ghc-steering-committee at haskell.org <mailto:ghc-steering-committee%40haskell.org>
> https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee
>


More information about the ghc-steering-committee mailing list