<div dir="ltr"><div><div><div>+1. This sounds like a good change and, for the most part, doesn't seem all that painful.<br><br></div>As far as naming goes, perhaps we could make the name refer to do-notation? Something like DoFail. I mean, that doesn't sound great, but it makes it clear where fail comes in and how it might apply to non-monad type stuff. (ApplicativeDo, for example?)<br><br></div>It's also good because nothing about fail is integral to the abstract idea of a monad or even an applicative. It's a function of convenience to make pattern matches in do-notation play out better in cases where it's meaningful.<br><br></div>That's true in the other direction too: nothing about a `fail` function is particularly tied to monads or even applicatives. A Monad/Applicative superclass might make the desugaring easier and closer to current behavior, but the idea of a fail :: String -> f a is broadly applicable to fs that aren't necessarily either of those.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 9, 2015 at 3:42 PM, David Luposchainsky <span dir="ltr"><<a href="mailto:dluposchainsky@googlemail.com" target="_blank">dluposchainsky@googlemail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">-----BEGIN PGP SIGNED MESSAGE-----<br>
Hash: SHA1<br>
<br>
</span><span class="">On 10.06.2015 00:26, Johan Tibell wrote:<br>
> "As a consequence, in current Haskell, you can not use Monad-polymorphic code<br>
> safely, because although it claims to work for all Monads, it might just crash<br>
> on you. This kind of implicit non-totality baked into the class is terrible."<br>
><br>
> Is this actually a problem in practice? Is there any code we can point to<br>
> that suffers because of the current state of affairs? Could it be included in<br>
> the proposal?<br>
<br>
</span>I don't have hard evidence, but the Monad class being partial strikes me as<br>
pretty backwards in a language where totality and no implicit failures are<br>
important to the programmers. We try our best to advocate not using certain<br>
functions like "head" carelessly, but do-notation comes with similar partiality.<br>
<br>
One concrete example that I know is bimap, but that's something I stumbled upon<br>
months ago by accident. Another is that Binary does not have a monomorphic "fail"<br>
function and it hurts me a bit to use the Monad-"fail" and write a comment on how<br>
that is safe to do in the current context.<br>
<br>
I think there are two important consequences of MonadFail. First of all, we can<br>
all safely write failable patterns if we so desire. Second, the compiler can<br>
ensure other people's codebases do not lie to us (knowingly or unknowingly).<br>
<br>
David/quchen<br>
<span class="">-----BEGIN PGP SIGNATURE-----<br>
Version: GnuPG v1<br>
<br>
</span>iQEcBAEBAgAGBQJVd2vEAAoJELrQsaT5WQUs+m8IAOWA9Hd52MG1wZ6g6FoOcXd6<br>
x64dRDlilmkVu2IRxHADzip75Oji254yKQ5VY9yMGjYpFajtgf0Q8LrmA0ePTzhg<br>
E/oxdm1vyRoJab1C5TfdrzPM/voP+wHi7y2ak1j0hTNky+wETj4MKtJ/Jef225nd<br>
APUq05t6nPwzEDCz37RitfbA6/nwwYShaVjNe0tRluPrJuxdBu0+aobFc2lzVL+s<br>
J7egnV1kqEOhc7INOhWYsvAJPAJSiY950y/Nmxb2/r5orTfN3tsr98d1zwRxhCmq<br>
UNXhUaj5xD7BK2Rn1Zy7VwUv1T8IRLZuOQrlZh3HWz4t1SI0tTu3tdS468s/B1g=<br>
=4mEU<br>
<div class="HOEnZb"><div class="h5">-----END PGP SIGNATURE-----<br>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</div></div></blockquote></div><br></div>