title: Does iteratee I/O make sense in non-functional languages?
body: <p>In Haskell, <a href="http://www.haskell.org/haskellwiki/Iteratee_I/O">Iteratee based I/O</a> seems very attractive. Iteratees are a composable, safe, fast ways of doing I/O inspired by the 'fold' a.k.a. 'reduce' function in functional languages. 
  Basically, if you have a traversal the idea is to encapsulate the traversal state into a so-called "enumerator" who calls the "iteratee" which is in turn a function either returning a value or a request for more data along with a continuation for the enumerator to call. So only the enumerator knows the state of the traversal while the iteratee knows what to do with the data and builds values out of it. The nice thing about it is that iteratees are automatically composable, where output of one iteratee is fed to another to make a bigger one.</p>
  
  <p>So, two questions: </p>
  
  <ul>
  <li>Does the concept even make sence in other languages, like plain object oriented languages or is it only useful for overcoming the shortcomings of Haskell's lazy I/O?</li>
  <li>Are there any actual implementations for other languages, especially C# (as that is what my company uses)? (A google search turns up one mention of iteratees in Scala; well, I'm not that interested in Scala right now). </li>
  </ul>