<div dir="ltr">Concurrency *can* be defined in Haskell proper (the denotative subset), but not compatibly with that "source code" and probably not at all with the current particulars of IO. With the source code in question, even the "real world" cannot evolve concurrently with program execution, let alone different threads with an IO computation.<br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jul 11, 2018 at 7:03 PM, Brandon Allbery <span dir="ltr"><<a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">In the presence of concurrency, IO requires runtime support and can't be simply defined in Haskell proper.</div><div><div class="m_168607365877069633h5"><br><div class="gmail_quote"><div dir="ltr">On Wed, Jul 11, 2018 at 9:59 PM Vanessa McHale <<a href="mailto:vanessa.mchale@iohk.io" target="_blank">vanessa.mchale@iohk.io</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<p>I'm not sure I follow. Do you mean that IO is not a monad because
equivalence of values cannot be defined? Or is it something
deeper? <br>
</p>
<div class="m_168607365877069633m_5931720321650459716m_2287536917781494007moz-cite-prefix">On 07/11/2018 05:19 PM, Conal Elliott
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">> <span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">The
fact that you can define the IO monad in Haskell was quite a
revelation.</span>
<div><br>
</div>
<div>But it's *not* a fact. It's a lie. And one of the most
devious sort, since the source code appears to agree. The
purported definition couldn't possibly explain concurrency.<br>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Wed, Jul 11, 2018 at 7:21 AM,
Vanessa McHale <span dir="ltr"><<a href="mailto:vanessa.mchale@iohk.io" target="_blank">vanessa.mchale@iohk.io</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<p>I find it quite elegant! The fact that you can
define the IO monad in Haskell was quite a
revelation. And it's especially nice when paired
with a demonstration of C FFI (where you might
*need* to sequence side effects such as freeing a
value after it has been read).<br>
</p>
<pre><span></span><a name="m_168607365877069633_m_5931720321650459716_m_2287536917781494007_m_297526233649517979_line-175"></a><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-keyword">newtype</span><span> </span><a name="m_168607365877069633_m_5931720321650459716_m_2287536917781494007_m_297526233649517979_IO"></a><a href="http://hackage.haskell.org/package/ghc-prim-0.5.2.0/docs/src/GHC.Types.html#IO" target="_blank"><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-identifier">IO</span></a><span> </span><a name="m_168607365877069633_m_5931720321650459716_m_2287536917781494007_m_297526233649517979_local-6989586621679009802"></a><a href="http://hackage.haskell.org/package/ghc-prim-0.5.2.0/docs/src/GHC.Types.html#local-6989586621679009802" target="_blank"><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-identifier">a</span></a><span> </span><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-glyph">=</span><span> </span><a name="m_168607365877069633_m_5931720321650459716_m_2287536917781494007_m_297526233649517979_IO"></a><a href="http://hackage.haskell.org/package/ghc-prim-0.5.2.0/docs/src/GHC.Types.html#IO" target="_blank"><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-identifier">IO</span></a><span> </span><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-special">(</span><a href="http://hackage.haskell.org/package/ghc-prim-0.5.2.0/docs/src/GHC.Prim.html#State%23" target="_blank"><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-identifier m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-type">State#</span></a><span> </span><a href="http://hackage.haskell.org/package/ghc-prim-0.5.2.0/docs/src/GHC.Prim.html#RealWorld" target="_blank"><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-identifier m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-type">RealWorld</span></a><span> </span><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-glyph">-></span><span> </span><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-special">(#</span><span> </span><a href="http://hackage.haskell.org/package/ghc-prim-0.5.2.0/docs/src/GHC.Prim.html#State%23" target="_blank"><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-identifier m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-type">State#</span></a><span> </span><a href="http://hackage.haskell.org/package/ghc-prim-0.5.2.0/docs/src/GHC.Prim.html#RealWorld" target="_blank"><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-identifier m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-type">RealWorld</span></a><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-special">,</span><span> </span><a href="http://hackage.haskell.org/package/ghc-prim-0.5.2.0/docs/src/GHC.Types.html#local-6989586621679009802" target="_blank"><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-identifier m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-type">a</span></a><span> </span><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-special">#)</span><span class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979hs-special">)</span><span></span></pre>
<div>
<div class="m_168607365877069633m_5931720321650459716m_2287536917781494007h5"> <br>
<div class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979moz-cite-prefix">On
07/11/2018 09:14 AM, Stefan Monnier wrote:<br>
</div>
<blockquote type="cite">
<blockquote type="cite">
<pre>In a few weeks I'm giving a talk to a bunch of genomics folk at the Sanger
Institute<a class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979moz-txt-link-rfc2396E" href="https://www.sanger.ac.uk/" target="_blank"><https://www.sanger.a<wbr>c.uk/></a> about Haskell. They do lots of
programming, but they aren't computer scientists.
I can tell them plenty about Haskell, but I'm ill-equipped to answer the
main question in their minds: why should I even care about Haskell? I'm too
much of a biased witness.
</pre>
</blockquote>
<pre>I don't much like the monad solution for side-effects, but if those guys
might have some knowledge of the horror of concurrent programming with
locks, the STM system would be a good candidate.
Stefan
______________________________<wbr>_________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
<a class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979moz-txt-link-freetext" href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/haskell-caf<wbr>e</a>
Only members subscribed via the mailman list are allowed to post.</pre>
</blockquote>
<br>
</div>
</div>
<div class="m_168607365877069633m_5931720321650459716m_2287536917781494007m_297526233649517979moz-signature">-- <br>
<br>
<br>
<br>
<strong style="color:#000;font-family:Helvetica,Arial;font-size:116%">Vanessa
McHale</strong><br>
<span style="color:#000;font-family:Helvetica,Arial;font-size:100%"><span style="color:#f00">Functional Compiler Engineer
|</span> Chicago, IL</span> <br>
<br>
<span style="color:#999;font-family:Helvetica,Arial;font-size:85%">Website:
<a href="http://iohk.io" style="color:#f00" target="_blank">www.iohk.io</a></span><br>
<span style="color:#999;font-family:Helvetica,Arial;font-size:85%">Twitter:
@vamchale</span><br>
<span style="color:#999;font-family:Helvetica,Arial;font-size:85%">PGP
Key ID: 4209B7B5</span><br>
<br>
<a href="http://iohk.io" target="_blank"><img src="https://static.iohk.io/logo/logo-email.png" alt="Input Output" height="46" width="200"></a> <br>
<br>
<a href="https://twitter.com/InputOutputHK" target="_blank"><img src="https://static.iohk.io/images/ic-tw.png" alt="Twitter" height="16" width="18"></a> <a href="https://github.com/input-output-hk" target="_blank"><img src="https://static.iohk.io/images/ic-gh.png" alt="Github" height="16" width="21"></a> <a href="https://www.linkedin.com/company/input-output-global" target="_blank"><img src="https://static.iohk.io/images/ic-li.png" alt="LinkedIn" height="16" width="19"></a> <br>
<br>
<br>
<span style="color:#444;font-family:Helvetica,Arial;font-size:77%"><small>This
e-mail and any file transmitted with it are
confidential and intended solely for the use of
the recipient(s) to whom it is addressed.
Dissemination, distribution, and/or copying of
the transmission by anyone other than the
intended recipient(s) is prohibited. If you have
received this transmission in error please
notify IOHK immediately and delete it from your
system. E-mail transmissions cannot be
guaranteed to be secure or error free. We do not
accept liability for any loss, damage, or error
arising from this transmission</small></span></div>
</div>
<br>
______________________________<wbr>_________________<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-bi<wbr>n/mailman/listinfo/haskell-caf<wbr>e</a><br>
Only members subscribed via the mailman list are allowed
to post.<br>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</blockquote>
</div>
______________________________<wbr>_________________<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-bi<wbr>n/mailman/listinfo/haskell-caf<wbr>e</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div><br clear="all"><div><br></div>-- <br></div></div><div dir="ltr" class="m_168607365877069633m_5931720321650459716gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>brandon s allbery kf8nh sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a> <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div><div>unix, openafs, kerberos, infrastructure, xmonad <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div></div>
</blockquote></div><br></div></div>