<div dir="ltr">When this was first discussed a bunch of alternatives were tossed around, mostly involving new keywords, or putting a conditional <font face="monospace, monospace">result</font> keyword in place. Here you can pick the name of the result type, so it doesn't pick any naming conventions for you.<div><br></div><div>My understanding is that the current syntax was selected because it avoids magic conditional keywords and fits into a gap in the current grammar. </div><div><br></div><div>All of the alternatives seemed worse.</div><div><br></div><div>-Edward</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Feb 14, 2016 at 5:56 AM, Matthew Pickering <span dir="ltr"><<a href="mailto:matthewtpickering@gmail.com" target="_blank">matthewtpickering@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I guess my point is that the most natural parsing of<br>
<span class=""><br>
class Hcl a b where<br>
</span>     type Ht a b = r | r -> a b<br>
<br>
is  (type Ht a b = r) (| r -> a b) rather than (type Ht a b) (= r | r -> a b).<br>
<br>
A concrete example, in the case of functional dependencies, the<br>
vertical bar is used to signal what we expect *additional* optional<br>
information. In this case, adding the injectivity annotation<br>
completely changes the meaning of what came before.<br>
<br>
I don't have a solution and I hate bike-shedding. I just made this<br>
message to make sure the fact had been considered before release.<br>
<br>
Matt<br>
<span class=""><br>
<br>
<br>
On Sun, Feb 14, 2016 at 9:28 AM, Jan Stolarek <<a href="mailto:jan.stolarek@p.lodz.pl">jan.stolarek@p.lodz.pl</a>> wrote:<br>
>> 2. Without the infectivity annotation, this declares an associate type<br>
>> synonym default. This isn't valid because Ht is not declared as an<br>
>> associated type before hand and r is not mentioned on the LHS.<br>
>><br>
>> class Hcl a b where<br>
>>     type Ht a b = r<br>
> Indeed, this is invalid and GHC rejects this, so I think we're OK here. In case of associated<br>
> types if you want to declare injectivity you need to provide the "| r -> ...." part. Otherwise<br>
> you're declaring a default. This is documented in the User's Guide for 8.0.<br>
><br>
> Janek<br>
><br>
> ---<br>
</span>> Politechnika Łódzka<br>
> Lodz University of Technology<br>
><br>
> Treść tej wiadomości zawiera informacje przeznaczone tylko dla adresata.<br>
> Jeżeli nie jesteście Państwo jej adresatem, bądź otrzymaliście ją przez pomyłkę<br>
> prosimy o powiadomienie o tym nadawcy oraz trwałe jej usunięcie.<br>
<div class="HOEnZb"><div class="h5">><br>
> This email contains information intended solely for the use of the individual to whom it is addressed.<br>
> If you are not the intended recipient or if you have received this message in error,<br>
> please notify the sender and delete it from your system.<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>
</div></div></blockquote></div><br></div>