<div dir="ltr">ok, cool! I'm not sure what modular scoping would look like, but it'd be fun what that looks like!<div><br></div><div>I do think that the prime list isn't the best list though for figuring that out / experimentations thereof :) </div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Oct 10, 2018 at 1:36 PM <<a href="mailto:camarao@dcc.ufmg.br">camarao@dcc.ufmg.br</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Carter,<br>
<br>
I am not proposing "local scoping". I think local scoping<br>
does not have substantial gains and at least introduces<br>
some difficulties and complexity (I have tried it in system CT).<br>
<br>
Even modular scope for instances is not mandatory, as I said.<br>
A general defaulting rule is a remedy, if instance modular scope is not <br>
supported, for changing the ambiguity rule<br>
(I prefer modular instance scoping though).<br>
<br>
I don't want to fight for anything. I'd like to contribute<br>
if the Haskell community friendly wishes me to do so in order to <br>
introduce MPTCs in a relatively simple way, without the need of extra <br>
mechanisms, based essentially on changing the ambiguity rule:<br>
I think a type like, say, (F a b, X a) => b is not ambiguous<br>
(F and X being classes with members f:: a->b and x::a, say),<br>
since then overloading of (f x) can be resolved, with a new<br>
ambiguity rule, depending on the context (or type) where (f x) is used.<br>
<br>
Kind regards,<br>
<br>
Carlos<br>
<br>
Em 2018-10-10 12:52, Carter Schonwald escreveu:<br>
> Carlos, local scoping for type classes is flat out not gonna happen in<br>
> the haskell language standard any time soon.<br>
> <br>
> if you want to make a case for it, demonstrate its utility, this<br>
> mailing list isn't for that. Especially for something that<br>
> fundamentally changes the programming model of the language in<br>
> question in a way that isn't compatible<br>
> <br>
> merry adventures!<br>
> -Carter<br>
> <br>
> On Mon, Oct 8, 2018 at 8:47 PM Carlos Camarao<br>
> <<a href="mailto:carlos.camarao@gmail.com" target="_blank">carlos.camarao@gmail.com</a>> wrote:<br>
> <br>
>> Hi.<br>
>> <br>
>>> Thanks Carlos. I wish I could say thank you for clarifying, but<br>
>> I'm<br>
>>> afraid this is as muddled as all the comments on the two<br>
>> proposals.<br>
>>> <br>
>>> I don't want to go over it again. I just want to say that my<br>
>>> suggestion earlier in the thread is fundamentally different.<br>
>>> <br>
>>>> Global instance scope is not ok either: instances should be<br>
>> modular.<br>
>>> I just plain disagree. Fundamentally.<br>
>> <br>
>> Global instance scope is not required for principal typing: a<br>
>> principal type is (just) a type of an expression in a given typing<br>
>> context that has all other types of this expression in that typing<br>
>> context as instances.<br>
>> <br>
>> (Also: instance modularity is not the central issue.)<br>
>> <br>
>>>>> Wadler & Blott's 1988 paper last paragraph had already<br>
>> explained: "But<br>
>>>>> there is no principal type! "<br>
>> <br>
>>>> There is always a principal type, for every expression.<br>
>>>> Of course the type depends on the context where the<br>
>> expression occurs.<br>
>> <br>
>>> Then it's not a _principal_ type for the expression, it's just a<br>
>> local type.<br>
>>> <a href="http://foldoc.org/principal" rel="noreferrer" target="_blank">http://foldoc.org/principal</a><br>
>> <br>
>> A type system has the principal type property if, given a<br>
>> term and a typing context, there exists a type for this term in this<br>
>> typing context such that all other types for this term in this<br>
>> typing<br>
>> context are an instance of this type.<br>
>> <br>
>>> We arrive at the principal type by unifying the principal types of<br>
>>> the sub-expressions, down to the principal types of each atom. W&B<br>
>>> are pointing out that without global scope for instances, typing<br>
>>> cannot assign a principal type to each method. (They left that as<br>
>> an<br>
>>> open problem at the end of the paper. Haskell has resolved that<br>
>>> problem by making all instances global. Changing Haskell to<br>
>> modular<br>
>>> instances would be a breakage. Fundamentally.)<br>
>>> <br>
>>> Under my suggestion, we can assign a (global) principal type to<br>
>> each<br>
>>> method -- indeed you must, by giving a signature very similar to a<br>
>>> class declaration; and that distinguishes overloaded functions<br>
>> from<br>
>>> parametric polymorphic functions.<br>
>> <br>
>> A principal type theorem has been proved: see, for example, Theorem<br>
>> 1 in [1].<br>
>> <br>
>> Kind regards,<br>
>> <br>
>> Carlos<br>
>> <br>
>> [1] Ambiguity and Constrained Polymorphism,<br>
>> Carlos Camarão, Lucília Figueiredo, Rodrigo Ribeiro,<br>
>> Science of Computer Programming 124(1), 1--19, August 2016.<br>
>> <br>
>> On Mon, 8 Oct 2018 at 20:03, Anthony Clayden<br>
>> <<a href="mailto:anthony_clayden@clear.net.nz" target="_blank">anthony_clayden@clear.net.nz</a>> wrote:<br>
>> <br>
>> On Tue, 9 Oct 2018 at 7:30 AM, <<a href="mailto:camarao@dcc.ufmg.br" target="_blank">camarao@dcc.ufmg.br</a>> wrote:<br>
>> <br>
>> Thanks Carlos. I wish I could say thank you for clarifying, but I'm<br>
>> afraid this is as muddled as all the comments on the two proposals.<br>
>> <br>
>> I don't want to go over it again. I just want to say that my<br>
>> suggestion earlier in the thread is fundamentally different.<br>
>> <br>
>> Em 2018-10-08 06:21, Anthony Clayden escreveu:<br>
>>> On Mon, 8 Oct 2018 at 8:41 PM, Simon Peyton Jones wrote:<br>
>>> <br>
>> <br>
>> Strange: Simon's message has not appeared on the forum (he did send<br>
>> to it). I've quoted it in full in my reply, but did break it into<br>
>> separate pieces.<br>
>> <br>
>> Global instance scope is not ok either: instances should be modular.<br>
>> <br>
>> I just plain disagree. Fundamentally.<br>
>> <br>
>>> <br>
>>> Wadler & Blott's 1988 paper last paragraph had already explained:<br>
>> "But<br>
>>> there is no principal type! "<br>
>> <br>
>> There is always a principal type, for every expression.<br>
>> Of course the type depends on the context where the expression<br>
>> occurs.<br>
>> <br>
>> Then it's not a _principal_ type for the expression, it's just a<br>
>> local type.<br>
>> <br>
>> <a href="http://foldoc.org/principal" rel="noreferrer" target="_blank">http://foldoc.org/principal</a><br>
>> <br>
>> We arrive at the principal type by unifying the principal types of<br>
>> the sub-expressions, down to the principal types of each atom. W&B<br>
>> are pointing out that without global scope for instances, typing<br>
>> cannot assign a principal type to each method. (They left that as an<br>
>> open problem at the end of the paper. Haskell has resolved that<br>
>> problem by making all instances global. Changing Haskell to modular<br>
>> instances would be a breakage. Fundamentally.)<br>
>> <br>
>> Under my suggestion, we can assign a (global) principal type to each<br>
>> method -- indeed you must, by giving a signature very similar to a<br>
>> class declaration; and that distinguishes overloaded functions from<br>
>> parametric polymorphic functions.<br>
>> <br>
>> AntC _______________________________________________<br>
>> Haskell-prime mailing list<br>
>> <a href="mailto:Haskell-prime@haskell.org" target="_blank">Haskell-prime@haskell.org</a><br>
>> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-prime" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-prime</a><br>
>  _______________________________________________<br>
> Haskell-prime mailing list<br>
> <a href="mailto:Haskell-prime@haskell.org" target="_blank">Haskell-prime@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-prime" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-prime</a><br>
> _______________________________________________<br>
> Haskell-prime mailing list<br>
> <a href="mailto:Haskell-prime@haskell.org" target="_blank">Haskell-prime@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-prime" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-prime</a><br>
</blockquote></div>