title: What is the Haskell response to Node.js?
body: <p>I believe the Erlang community is not envious of Node.js as it does non-blocking I/O natively and has ways to scale deployments easily to more than one processor (something not even built-in in Node.js).  More details at <a href="http://journal.dedasys.com/2010/04/29/erlang-vs-node-js" rel="noreferrer">http://journal.dedasys.com/2010/04/29/erlang-vs-node-js</a> and <a href="https://stackoverflow.com/questions/3011317/node-js-or-erlang">Node.js or Erlang</a></p>
  
  <p>What about Haskell?  Can Haskell provide some of the benefits of Node.js, namely a clean solution to avoid blocking I/O without having recourse to multi-thread programming?</p>
  
  <hr>
  
  <p>There are many things that are attractive with Node.js</p>
  
  <ol>
  <li>Events: No thread manipulation, the programmer only provides callbacks (as in Snap framework)</li>
  <li>Callbacks are guaranteed to be run in a single thread: no race condition possible.</li>
  <li>Nice and simple UNIX-friendly API.  Bonus: Excellent HTTP support. DNS also available.</li>
  <li>Every I/O is by default asynchronous. This makes it easier to avoid locks.  However, too much CPU processing in a callback will impact other connections (in this case, the task should split into smaller sub-tasks and re-scheduled).</li>
  <li>Same language for client-side and server-side. (I don't see too much value in this one, however.  jQuery and Node.js share the event programming model but the rest is very different.  I just can't see how sharing code between server-side and client-side could be useful in practice.)</li>
  <li>All this packaged in a single product.</li>
  </ol>