<p dir="ltr">Everyone is talking about wanting a function to do this, but I'd argue an inline case statement is better. Whenever you have</p>
<p dir="ltr">  f (fromJust x)</p>
<p dir="ltr">You can write</p>
<p dir="ltr">  f (case x of Just x' -> x')</p>
<p dir="ltr">Its a little more typing, but the big wins are:</p>
<p dir="ltr">- a warning that you're relying on partiality<br>
- a useful error message if your assumption fails, giving you the line number of the pattern match failure.</p>
<p dir="ltr">These are both superior to fromJust, so I can see no reason for it to exist. If its useful in GHCI then add it to your .ghci. If you think everyone should have it by default, then maybe we should have a conversation about a "GHCI prelude".</p>
<p dir="ltr">+1, death to hidden partiality!</p>
<p dir="ltr">ocharles</p>
<div class="gmail_quote">On 24 Feb 2015 09:36, "Jon Fairbairn" <<a href="mailto:jon.fairbairn@cl.cam.ac.uk">jon.fairbairn@cl.cam.ac.uk</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Andrew Gibiansky <<a href="mailto:andrew.gibiansky@gmail.com">andrew.gibiansky@gmail.com</a>> writes:<br>
<br>
> I am strongly against this, as sometimes you *do* want to use fromJust. For<br>
> example:<br>
<br>
What people want isn’t necessarily good language design.<br>
<br>
> 1. Quick and dirty scripting/examples where you don't care about<br>
> error-proofing your work and just want it to be done quickly. In that<br>
> context, fromJust is a good function.<br>
<br>
but you can have your own library that contains “fromMaybe<br>
undefined” as well as all the other quick and dirty functions<br>
useful for one-off programmes.<br>
<br>
> 2. You know by construction that it is a Just constructor. This is usually<br>
> not a good design, but sometimes it's useful. Writing an (error "fromJust")<br>
> is possible, but annoying.<br>
<br>
Programming languages accrue all sorts of bad practices from<br>
that sort of argument. Good Haskell programming involves making<br>
the type system move as many errors as possible from run time to<br>
compile time.<br>
<br>
> (That said, I do wish that `head` and `tail` were replaced by `headMay` and<br>
> `tailMay`, which you could then use with `fromJust` if you wanted to. But<br>
> that's another discussion for adding things from `safe` to `base`,<br>
> unrelated...)<br>
<br>
I’m with you on that.<br>
<br>
So I’m +1 on the proposal.<br>
<br>
--<br>
Jón Fairbairn                                 <a href="mailto:Jon.Fairbairn@cl.cam.ac.uk">Jon.Fairbairn@cl.cam.ac.uk</a><br>
<br>
<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>
</blockquote></div>