<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
I’m nervous to endorse any solution that requires implicit parameters generally, just because of the cognitive overhead involved in reading and understanding any code involving them. I think, for the particular problem of dynamic builders, the record approach
 ends up being more “idiomatic Haskell” (for my personal definition of idiomatic, of course).
<div class=""><br class="">
</div>
<div class="">That said, I can’t deny that the solution works! Moreover, given that I don’t have a concrete example of a problem in mind, I wouldn’t want to hold up a final decision.
<div class=""><br class="">
</div>
<div class="">Cheers,</div>
<div class="">Tom<br class="">
<div><br class="">
<blockquote type="cite" class="">
<div class="">On 4 May 2020, at 16:22, Iavor Diatchki <<a href="mailto:iavor.diatchki@gmail.com" class="">iavor.diatchki@gmail.com</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div dir="auto" class="">You can define dynamic builders with the module based approach, there's an example on the GitHub thread.
<div dir="auto" class=""><br class="">
</div>
<div dir="auto" class="">Iavor</div>
</div>
<br class="">
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Mon, May 4, 2020, 05:00 Tom Harding <<a href="mailto:tomjharding@live.co.uk" target="_blank" rel="noreferrer" class="">tomjharding@live.co.uk</a>> wrote:<br class="">
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I’ve been quiet so far because I think both outcomes are perfectly sensible, and I don’t think I have anything to add that hasn’t already been covered.<br class="">
<br class="">
If really pushed, I’d perhaps have a slight bias towards the record-based approach, but really only because of the future possibility of dynamically constructing builders. However, I don’t think that preference is strong enough to be worth counting - I’m happy
 to abstain.<br class="">
<br class="">
Thanks,<br class="">
Tom<br class="">
<br class="">
> On 2 May 2020, at 10:54, Cale Gibbard <<a href="mailto:cgibbard@gmail.com" rel="noreferrer noreferrer" target="_blank" class="">cgibbard@gmail.com</a>> wrote:<br class="">
> <br class="">
> I greatly prefer the earlier module-based version of this where the<br class="">
> definitions of the relevant functions are simply obtained from the<br class="">
> qualified module and we don't have to talk about fully-settled types<br class="">
> to explain how expressions are going to desugar. Even if it's not<br class="">
> quite true in the case of GHC's internals that desugaring comes<br class="">
> entirely before typechecking, I think it's really very helpful in both<br class="">
> understanding the language ourselves and in explaining it to beginners<br class="">
> if we can at least think about it that way. The more that the<br class="">
> translation from surface syntax to core factors into a bunch of<br class="">
> individually comprehensible translations, the better.<br class="">
> <br class="">
> On Sat, 2 May 2020 at 05:39, Joachim Breitner <<a href="mailto:mail@joachim-breitner.de" rel="noreferrer noreferrer" target="_blank" class="">mail@joachim-breitner.de</a>> wrote:<br class="">
>> <br class="">
>> Dear Committee,<br class="">
>> <br class="">
>> it seems discussion has ebbed down. Are there any new arguments that<br class="">
>> can be brought forward? Did anyone have a change of mind which would<br class="">
>> bring us closer to (or farther away from) consensus? Or should we vote?<br class="">
>> <br class="">
>> Simon Marlow, Chris, Cale, Tom:<br class="">
>> You have not stated an opinion. Do you have one?<br class="">
>> <br class="">
>> Cheers,<br class="">
>> Joachim<br class="">
>> <br class="">
>> Am Mittwoch, den 22.04.2020, 12:26 +0200 schrieb Joachim Breitner:<br class="">
>>> Dear Committe,<br class="">
>>> <br class="">
>>> trying to summarize the discussion here.<br class="">
>>> <br class="">
>>> The main decision seems to be: Record based or module based.<br class="">
>>> <br class="">
>>>   Record based is preferred by:<br class="">
>>>   Arnaud (one of the authors), SPJ<br class="">
>>> <br class="">
>>>   Module based is preferred by:<br class="">
>>>   Richard (after changing his mind), Eric, Iavor, Vitaly, Alejandro,<br class="">
>>>   me<br class="">
>>> <br class="">
>>> This is not a vote, merely a summary of sentimenss. But it seems that<br class="">
>>> maybe the onus to make stronger arguments for the record-based approach<br class="">
>>> is on Simon and Arnaud?<br class="">
>>> <br class="">
>>> <br class="">
>>> Related to the  module based variant, there was some discussion about<br class="">
>>> whether the<br class="">
>>> * desugaring should go to a “qualified name”, that is then resolved<br class="">
>>>   like any manually written name<br class="">
>>>   (i.e. could conceptually be done in the parser)<br class="">
>>> * or if it should go directly a suitable “original name” of a suitable<br class="">
>>>   function, even if not explicitly imported<br class="">
>>>   (i.e. could conceptually be done in the renamer, but not the parser)<br class="">
>>> <br class="">
>>> I initially advocated for the latter, arguing with a “you shall not<br class="">
>>> have to import stuff you do not write explicitly” rule.<br class="">
>>> But Simon’s recent argument that<br class="">
>>> <br class="">
>>>    import qualified Monad as M<br class="">
>>> <br class="">
>>> (i.e. _with_ qualification, but _without_ an import list) will give the<br class="">
>>> developer a good user experience, and if they try to do things like<br class="">
>>> <br class="">
>>>    import Monad as M (runMonad)<br class="">
>>>    … M.do …<br class="">
>>> <br class="">
>>> then, well, they shouldn’t. So I am happy to advocate for the module<br class="">
>>> based approach with the “must be in scope” rule. But maybe we should<br class="">
>>> keep the focus more on the fundamental question above.<br class="">
>>> <br class="">
>>> <br class="">
>>> <br class="">
>>> We could keep in mind that eventually, people will ask for M.if; M.[<br class="">
>>> and other “qualified syntax”. But it seems that that will work equally<br class="">
>>> well with either choice here.<br class="">
>>> <br class="">
>>> Cheers,<br class="">
>>> Joachim<br class="">
>>> <br class="">
>>> <br class="">
>> --<br class="">
>> Joachim Breitner<br class="">
>>  <a href="mailto:mail@joachim-breitner.de" rel="noreferrer noreferrer" target="_blank" class="">
mail@joachim-breitner.de</a><br class="">
>>  <a href="http://www.joachim-breitner.de/" rel="noreferrer noreferrer noreferrer" target="_blank" class="">
http://www.joachim-breitner.de/</a><br class="">
>> <br class="">
>> <br class="">
>> _______________________________________________<br class="">
>> ghc-steering-committee mailing list<br class="">
>> <a href="mailto:ghc-steering-committee@haskell.org" rel="noreferrer noreferrer" target="_blank" class="">
ghc-steering-committee@haskell.org</a><br class="">
>> <a href="https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee" rel="noreferrer noreferrer noreferrer" target="_blank" class="">
https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee</a><br class="">
> _______________________________________________<br class="">
> ghc-steering-committee mailing list<br class="">
> <a href="mailto:ghc-steering-committee@haskell.org" rel="noreferrer noreferrer" target="_blank" class="">
ghc-steering-committee@haskell.org</a><br class="">
> <a href="https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee" rel="noreferrer noreferrer noreferrer" target="_blank" class="">
https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee</a><br class="">
<br class="">
_______________________________________________<br class="">
ghc-steering-committee mailing list<br class="">
<a href="mailto:ghc-steering-committee@haskell.org" rel="noreferrer noreferrer" target="_blank" class="">ghc-steering-committee@haskell.org</a><br class="">
<a href="https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee" rel="noreferrer noreferrer noreferrer" target="_blank" class="">https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee</a><br class="">
</blockquote>
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
</body>
</html>