<div dir="ltr">My opinion may not count for a lot from a compiler engineering perspective, but I can say with a fair bit of confidence that violating the "capitalized -> concrete constructor, lowercase -> variable" convention for types would be _very_ surprising to learners and users. I don't think it's a petty issue at all. This isn't a mistake we have to live with, even if it's regrettable that it's more work for Richard.<div><br></div><div>><span style="font-size:12.8px">(Wadler's Law strikes </span><span style="font-size:12.8px">again!)</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Apologies for my contributions on this front, didn't disagree with anything else and wanted to bolster Austin's concerns here.</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 13, 2015 at 7:37 PM, Austin Seipp <span dir="ltr"><<a href="mailto:austin@well-typed.com" target="_blank">austin@well-typed.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hey Richard,<br>
<br>
Thanks a lot. I'm very eager to see this land ASAP! It's exciting. But...<br>
<br>
Looking at the page, I really, really am still not a fan of using<br>
'type' in place of *, and I still think (as I mentioned on Reddit I<br>
believe) that 'Type' is the best choice for this. I mentioned this to<br>
Simon earlier, and I kind of hate to make even more work for you, but<br>
my basic reasoning is:<br>
<br>
  - '*' is not a good choice because it's a lexical wart. But in terms<br>
of 'theory', the statement '* :: *' is completely OK, or 'type ::<br>
type' or or 'U :: U' or 'Type :: Type'. That is, the reason star is<br>
bad is because it's a lexical problem that leads to weird ambiguous<br>
parsing, not that it's necessarily confusing or using any particular<br>
word I think.<br>
<br>
  - 'type' is not a good choice, because while in theory any name is<br>
kind of arbitrary, it's very confusing for Haskell IMO - we have<br>
_chosen_ the distinction between type variables and type constructors<br>
through the use of capitalization. I think it's a bit strange to say<br>
'*' or what have you has type 'type' yet 'type' is not an actual<br>
variable, nor a keyword in a meaningful sense, but an actual type on<br>
its own. Yet 0-arity type constructors of all sorts (like Int or Bool)<br>
have this lexical capitalization! That is, 'type' isn't confusing<br>
because it's a lexical wart, or has bad parsing - but because it<br>
violates how we syntactically distinguish type variables from<br>
constructors of types.<br>
<br>
  - (Correct if I'm wrong) As far as I understand, 'Type' doesn't need<br>
to be reserved unless -XTypeInType is enabled, correct? I think it is<br>
fairly reasonable to say that extensions may take up parts of your<br>
namespace should you enable them - for example, -XStaticPointers<br>
steals the term 'static' for itself, which I think is OK!<br>
<br>
  - As far as code breakage goes, I think the prior point makes the<br>
outright breakage minimal-to-none if true, which is great. Even GHC<br>
uses the name `Type`, but we wouldn't even be able to use -XTypeInType<br>
for another few years at best! So we have plenty of time to address<br>
that when we want to use it...<br>
<br>
I suppose #2 is a little 'feels-y', since 'violating' how we expect to<br>
read Haskell is maybe subjective. But I figure I might as well make a<br>
last ditch effort at the cost of a little stirring.<br>
<br>
I think that mostly sums it up. I'm still reading over the full page,<br>
I just got to this point and decided to shout. (Wadler's Law strikes<br>
again!)<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On Tue, Oct 13, 2015 at 12:32 PM, Richard Eisenberg <<a href="mailto:eir@cis.upenn.edu">eir@cis.upenn.edu</a>> wrote:<br>
> Hi devs,<br>
><br>
> In a chat with Simon this morning about kind equalities, he expressed that you all might want to know about the plans for kind equalities in 8.0.<br>
><br>
> The wiki page both for user-facing changes and for implementation notes is here: <a href="https://ghc.haskell.org/trac/ghc/wiki/DependentHaskell/Phase1" rel="noreferrer" target="_blank">https://ghc.haskell.org/trac/ghc/wiki/DependentHaskell/Phase1</a><br>
> It is my intent that all user-facing changes mentioned there will be available in 8.0. I am hard at work getting my branch ready to merge, and hope to do so mid-November.<br>
><br>
> Note: this is almost fully backward-compatible. Here are some areas where there are known incompatibilities:<br>
> - Template Haskell will have to be updated. But there's a raft of changes there, anyway.<br>
> - GHC will do a more careful job of checking for termination of instances regarding the use of kind variables. This may require new UndecidableInstances declarations. But the fact that these definitions (like `instance (C a, C b) => C (a b)` for a polykinded C) were accepted previously could be called a bug.<br>
><br>
> That's actually all I know of so far.<br>
><br>
> You can take kind equalities for a spin at <a href="http://github.com/goldfirere/ghc" rel="noreferrer" target="_blank">github.com/goldfirere/ghc</a>, on the "nokinds" branch. Note that this hasn't been merged with `master` since December of last year, so expect a little strange behavior compared with 7.10. These wrinkles will get smoothed out, of course.<br>
><br>
> Richard<br>
> _______________________________________________<br>
> ghc-devs mailing list<br>
> <a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
><br>
<br>
<br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
Regards,<br>
<br>
Austin Seipp, Haskell Consultant<br>
Well-Typed LLP, <a href="http://www.well-typed.com/" rel="noreferrer" target="_blank">http://www.well-typed.com/</a><br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr">Chris Allen<br><div><span style="font-size:12.8000001907349px">Currently working on </span><a href="http://haskellbook.com" target="_blank">http://haskellbook.com</a></div></div></div></div></div></div>
</div>