<div dir="auto">The purported definition also mixes very badly with strictness analysis. For IO, m >>= f should be *lazy* in f (e.g., print 3 >> undefined should print 3 before throwing an exception) but the purported definition would suggest it's *strict* (print 3 >> undefined is equivalent to undefined).</div><br><div class="gmail_quote"><div dir="ltr">On Wed, Jul 11, 2018, 6:20 PM Conal Elliott <<a href="mailto:conal@conal.net">conal@conal.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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" rel="noreferrer">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_-81505868944386976_m_297526233649517979_line-175" rel="noreferrer"></a><span class="m_-81505868944386976m_297526233649517979hs-keyword">newtype</span><span> </span><a name="m_-81505868944386976_m_297526233649517979_IO" rel="noreferrer"></a><a href="http://hackage.haskell.org/package/ghc-prim-0.5.2.0/docs/src/GHC.Types.html#IO" target="_blank" rel="noreferrer"><span class="m_-81505868944386976m_297526233649517979hs-identifier">IO</span></a><span> </span><a name="m_-81505868944386976_m_297526233649517979_local-6989586621679009802" rel="noreferrer"></a><a href="http://hackage.haskell.org/package/ghc-prim-0.5.2.0/docs/src/GHC.Types.html#local-6989586621679009802" target="_blank" rel="noreferrer"><span class="m_-81505868944386976m_297526233649517979hs-identifier">a</span></a><span> </span><span class="m_-81505868944386976m_297526233649517979hs-glyph">=</span><span> </span><a name="m_-81505868944386976_m_297526233649517979_IO" rel="noreferrer"></a><a href="http://hackage.haskell.org/package/ghc-prim-0.5.2.0/docs/src/GHC.Types.html#IO" target="_blank" rel="noreferrer"><span class="m_-81505868944386976m_297526233649517979hs-identifier">IO</span></a><span> </span><span class="m_-81505868944386976m_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" rel="noreferrer"><span class="m_-81505868944386976m_297526233649517979hs-identifier m_-81505868944386976m_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" rel="noreferrer"><span class="m_-81505868944386976m_297526233649517979hs-identifier m_-81505868944386976m_297526233649517979hs-type">RealWorld</span></a><span> </span><span class="m_-81505868944386976m_297526233649517979hs-glyph">-></span><span> </span><span class="m_-81505868944386976m_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" rel="noreferrer"><span class="m_-81505868944386976m_297526233649517979hs-identifier m_-81505868944386976m_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" rel="noreferrer"><span class="m_-81505868944386976m_297526233649517979hs-identifier m_-81505868944386976m_297526233649517979hs-type">RealWorld</span></a><span class="m_-81505868944386976m_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" rel="noreferrer"><span class="m_-81505868944386976m_297526233649517979hs-identifier m_-81505868944386976m_297526233649517979hs-type">a</span></a><span> </span><span class="m_-81505868944386976m_297526233649517979hs-special">#)</span><span class="m_-81505868944386976m_297526233649517979hs-special">)</span><span></span></pre><div><div class="m_-81505868944386976h5">
<br>
<div class="m_-81505868944386976m_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_-81505868944386976m_297526233649517979moz-txt-link-rfc2396E" href="https://www.sanger.ac.uk/" target="_blank" rel="noreferrer"><https://www.sanger.ac.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
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
<a class="m_-81505868944386976m_297526233649517979moz-txt-link-freetext" href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank" rel="noreferrer">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a>
Only members subscribed via the mailman list are allowed to post.</pre>
</blockquote>
<br>
</div></div><div class="m_-81505868944386976m_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" rel="noreferrer">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" rel="noreferrer"><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" rel="noreferrer"><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" rel="noreferrer"><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" rel="noreferrer"><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>_______________________________________________<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 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.<br></blockquote></div><br></div></div></div>
_______________________________________________<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 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>