<br><br><div class="gmail_quote">On Wed, Dec 9, 2009 at 6:00 PM, Brandon S. Allbery KF8NH <span dir="ltr">&lt;<a href="mailto:allbery@ece.cmu.edu">allbery@ece.cmu.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">On Dec 9, 2009, at 16:51 , Bas van Dijk wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I will change the types to:<br>
<br>
stdin :: Handle ReadMode<br>
stdout :: Handle WriteMode<br>
stderr :: Handle WriteMode<br>
<br>
Or are there scenarios where people want to write to stdin or read<br>
from stdout or stderr?<br>
</blockquote>
<br>
<br></div>
These situations *do* come up; the controlling terminal for a program is open read/write on all 3 file descriptors initially, ands programs like more/less/pg rely on this and do their I/O on stdout.  Additionally, on *BSD pipes are actually socketpairs and therefore bidirectional, and a small number of programs rely on this.<br>
</blockquote><div><br>I was surprised to hear this, so I did some fact checking:<br><a href="http://books.google.com/books?id=rHyMRyDEG3gC&amp;pg=PA39&amp;lpg=PA39&amp;dq=posix+write+to+stdin&amp;source=bl&amp;ots=vHsgioIR8J&amp;sig=PPXTzuwuuxyx_peCnuSNVmE220I&amp;hl=en&amp;ei=o6cgS-DxJ5S0sgPSl82kBQ&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=3&amp;ved=0CA8Q6AEwAjgK#v=onepage&amp;q=&amp;f=false">http://books.google.com/books?id=rHyMRyDEG3gC&amp;pg=PA39&amp;lpg=PA39&amp;dq=posix+write+to+stdin&amp;source=bl&amp;ots=vHsgioIR8J&amp;sig=PPXTzuwuuxyx_peCnuSNVmE220I&amp;hl=en&amp;ei=o6cgS-DxJ5S0sgPSl82kBQ&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=3&amp;ved=0CA8Q6AEwAjgK#v=onepage&amp;q=&amp;f=false</a><br>
<br>Looks like you&#39;re telling the truth.  Learn something new every time I read Haskell-Cafe :)<br><br>Jason<br></div></div>