<div dir="ltr"><div>Just my 2c:</div><div><br></div><div>I would be very interested in seeing an alternative standard lib written in this style, similar to how Haskell has multiple alternative Preludes: <a href="https://guide.aelve.com/haskell/alternative-preludes-zr69k1hc">https://guide.aelve.com/haskell/alternative-preludes-zr69k1hc</a></div><div><br></div><div>That way the full implications can be tested, and code available to anyone who wants to use it, before upstream commits one way or the other.<br></div><div><br></div><div>Aistis Raulinaitis<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 26, 2022 at 1:03 PM Dirk Ziegemeyer <<a href="mailto:dirk@ziegemeyer.de">dirk@ziegemeyer.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
> Am 24.01.2022 um 07:35 schrieb Peter Wang <<a href="mailto:novalazy@gmail.com" target="_blank">novalazy@gmail.com</a>>:<br>
> <br>
> If I'm remembering correctly, historically there were concerns about the<br>
> performance impact on the compiler if inst parameters or complex insts<br>
> were more widely used. There may have been some concerns about<br>
> correctness as well, I guess. (My view may be coloured by having to fix<br>
> some bugs with constrained polymorphic modes a few years ago.)<br>
> <br>
> Obviously any problems uncovered would (necessarily) be addressed if we<br>
> started using parameteric modes in the standard library, so it may just<br>
> be a matter of committing to it.<br>
<br>
Are there any reasons for not committing to a mode-polymorphic standard library?<br>
<br>
I remember these issues when using insts:<br>
1. Mode declarations will become much longer and intimidating.<br>
2. Compiler errors in case of inst mismatch can be very long and hard to read in case of insts with a lot of constructors.<br>
<br>
Example of 1)<br>
<br>
Now:<br>
:- mode list.foldl4(pred(in, in, out, in, out, in, out, in, out) is det,<br>
    in, in, out, in, out, in, out, in, out) is det.<br>
<br>
With mode-polymorphic insts: <br>
:- mode list.foldl4(<br>
    pred(in(I0), in(I1), out(I1), in(I2), out(I2), in(I3), out(I3), in(I4),<br>
        out(I4)) is det,<br>
    in(list(I0)), in(I1), out(I1), in(I2), out(I2), in(I3), out(I3), in(I4),<br>
    out(I4)) is det.<br>
_______________________________________________<br>
users mailing list<br>
<a href="mailto:users@lists.mercurylang.org" target="_blank">users@lists.mercurylang.org</a><br>
<a href="https://lists.mercurylang.org/listinfo/users" rel="noreferrer" target="_blank">https://lists.mercurylang.org/listinfo/users</a><br>
</blockquote></div>