<div dir="ltr">On Mon, Aug 27, 2012 at 1:55 PM, Eric Tanter <span dir="ltr">&lt;<a href="mailto:etanter@dcc.uchile.cl" target="_blank">etanter@dcc.uchile.cl</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Here is a simple shell script (upper.hs):<br></blockquote><div><br></div><div>&quot;shell script&quot; means a script written in the shell&#39;s programming language.  This is probably best referred to as a Haskell script.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">bash-3.2$ yes | runghc upper.hs | head -n 3<br>
Y<br>
Y<br>
Y<br>
&lt;stdout&gt;: hFlush: resource vanished (Broken pipe)<br>
<br>
Any idea why this error occurs/how to avoid it?<br></blockquote><div><br></div><div>It&#39;s normal, and shells normally ignore it when programs in the middle of a pipeline die with SIGPIPE.  Problem here is the Haskell runtime is itself intercepting the SIGPIPE and throwing a verbose Haskell exception.</div>
<div><br></div><div>Possibly the runtime should detect that stdout is a pipe and disable the usual SIGPIPE handler, or if it must run cleanup stuff then it should not print anything and it should after cleanup raise(SIGPIPE) on itself with the default SIGPIPE handler so the shell will react properly.</div>
<div><br></div><div>You might be able to do this yourself with (System.Posix.Signals.installHandler openEndedPipe Default Nothing).</div><div><br></div></div>-- <br>brandon s allbery                                      <a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a><br>
wandering unix systems administrator (available)     (412) 475-9364 vm/sms<br><br>
</div>