<div dir="ltr">I'm also in favor of removing this instance. Since there is currently no deprecation mechanism for instances, I think it should simply be removed in GHC 8.12.<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 25, 2019 at 7:14 AM Oleg Grenrus <<a href="mailto:oleg.grenrus@iki.fi">oleg.grenrus@iki.fi</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">As replied by Henning, fail @IO = throwIO . userError,<br>
which isn't throwing a pure exception. The IO instance is in the spirit <br>
of MonadFail proposal, it behaves well.<br>
<br>
If you write GHC-7.10..GHC-8.x code, you **should** depend on `fail` <br>
package, to get MonadFail class for GHC-7.x.<br>
See <br>
<a href="https://prime.haskell.org/wiki/Libraries/Proposals/MonadFail#Adaptingoldcode" rel="noreferrer" target="_blank">https://prime.haskell.org/wiki/Libraries/Proposals/MonadFail#Adaptingoldcode</a><br>
<br>
On 25.11.2019 12.28, Bertram Felgenhauer via Libraries wrote:<br>
> Oleg Grenrus wrote:<br>
>> I cannot see any justification for that instance<br>
>><br>
>>      -- | @since 4.11.0.0<br>
>>      instance Fail.MonadFail (ST s) where<br>
>>          fail s = errorWithoutStackTrace s<br>
> It's certainly not in the spirit of the MonadFail proposal. Arguably,<br>
> *all* implementations of `fail` in terms of `error*` are wrong, even<br>
> the one for IO. (I suspect dropping the instance for IO would cause a<br>
> lot of pain though...)<br>
><br>
> I'm neutral on the proposal itself.<br>
><br>
>> If someone wants to fail pattern matches in `ST s`, please do that<br>
>> explicitly.<br>
> However, I don't like this framing. In practice, there's at least one<br>
> other use of MonadFail for historical reasons: generic code that may<br>
> fail. Before MFP, one could write (and people have written) code like<br>
><br>
>      fooM :: Monad m => a -> m b<br>
>      fooM ... = fail "unsupported case"<br>
><br>
> It is easy enough to change the signature of such a `fooM` to require<br>
> MonadFail, but then the function becomes impossible to use for monads<br>
> that don't have a MonadFail instance. So after the MFP, one should<br>
> provide two functions instead, one using `error` and another one<br>
> using `fail`...<br>
><br>
>> Note: compatibility package<br>
>> <a href="https://hackage.haskell.org/package/fail-4.9.0.0/docs/Control-Monad-Fail.html" rel="noreferrer" target="_blank">https://hackage.haskell.org/package/fail-4.9.0.0/docs/Control-Monad-Fail.html</a><br>
>> doesn't have that instance, so I suspect not-that many use(d) that instance.<br>
> Or perhaps nobody cares about ghc-7.10 anymore.<br>
><br>
> Cheers,<br>
><br>
> Bertram<br>
> _______________________________________________<br>
> Libraries mailing list<br>
> <a href="mailto:Libraries@haskell.org" target="_blank">Libraries@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org" target="_blank">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature">-Andrew Thaddeus Martin</div>