<div dir="ltr">Go look at accursedUnutterablePerformIO (aka inlinePerformIO) sometime. IO's just a barrier for impurity, and if you make the barrier leaky then you can expect weird behavior at best.</div><br><div class="gmail_quote"><div dir="ltr">On Sat, Nov 3, 2018 at 5:00 AM Joachim Durchholz <<a href="mailto:jo@durchholz.org">jo@durchholz.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Am 03.11.18 um 09:31 schrieb Brandon Allbery:<br>
> Conceptualization of IO is difficult. One way to think about it is the <br>
> result of (main :: IO a) is a program sent to an impure runtime to <br>
> execute, with IO actions being compositions of instructions for the <br>
> runtimeā€¦ but this breaks down as soon as you discover unsafePerformIO.<br>
<br>
I have been thinking that that's just a conceptual accident: pure <br>
functions are enough to get all the useful effects (and most of the <br>
downsides) of global variables and mutable state, but pure functions <br>
cannot do IO. So unsafePerformIO is the one unsafe thing that was kept, <br>
other unsafe operations were either dropped or never made it into <br>
Haskell (remember that Haskell was designed by people who had been doing <br>
pure nonstrict languages for a decade or more).<br>
<br>
> The closest that you'll get to the reality for GHC is that it pretty <br>
> much is a haven for impurity: that it forces all impure functions to <br>
> declare that in their types.<br>
If Haskell is truly pure, then IO must be pure as well.<br>
That's why I think that IO functions are just describing impure <br>
activity, not doing it.<br>
I have not been able to verify whether this is actually true. Maybe IO <br>
is really a wart on Haskell's purity.<br>
I'd hate it if it were, and I think the Haskell design group would have <br>
hated that as well. OTOH IO is one of three approaches, and it happened <br>
to be the one that became usable first, so it's not part of the initial <br>
design process. Then again I like to think that SPJ wouldn't even <br>
contemplate something impure - but I don't really know.<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>brandon s allbery kf8nh</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a></div></div></div></div></div>