[email protected]
[Top] [All Lists]

Re: [Haskell-cafe] Web application interface

Subject: Re: [Haskell-cafe] Web application interface
From: Michael Snoyman
Date: Thu, 14 Jan 2010 14:14:12 +0200


On Thu, Jan 14, 2010 at 1:58 PM, Alberto G. Corona <[email protected]> wrote:


2010/1/14 Michael Snoyman <[email protected]>


On Thu, Jan 14, 2010 at 1:20 PM, Alberto G. Corona <[email protected]> wrote:


2010/1/14 Michael Snoyman <[email protected]>



Well, for one thing, you'd need to use lazy IO to achieve your goal, which has some safety issues. As things get more and more complex, the requirements of lazy IO will continue to grow. This also has implications for number of open file handles and deterministic space usage. Given the fact that a lazy bytestring and easily be converted to an enumerator, I think it makes sense to start a new package using this approach.

These must be issues of base library developers, not application developpers. TIme ago a guy said me that using an standard library like malloc for memory allocation where not the optimum. And he was right. Fortunately things went in the "non-optimum" direction. ÂYou can make the application faster by using your own plumbing code instead of standard libraries provided that you have enough time and knowledge. Because I donÂt have neither of the two Â:-) (nor have the people that read my code and maintain the application), I really like the laziness of haskell and the lazy bytestring interface.

Lazy bytestring interface is one thing; lazy IO is another. If you have pure code generating a lazy bytestring, Hack will work fine for you. Try this one however: take a 10MB YAML file, reformat it using something in the IO monad (for example, look up values from a database) and produce HTML output. Hack will *not* allow you to run in constant space without significant usageof unsafe functions.

Michael

So there are memory leaks somewhere in the lazy bytestring IO libraries (not in hack neither is an inherent problem in the lazy bytestring design, the lazy IO concept or laziness as such).Â

I did''t take a look, but surely a lazy bytestring IO read is composed of an iteration of strict block reads that present a lazy bytestring interface. It must be Âessentially the same than a iteratee IO, but with a higher level interface (at least higher from my point of view).Â

I like haskell for Internet applications because streaming is the essence of communications and function call is the building block of programming. Haskell deals with both with zero impedance because its laziness. Don't break this!!


No, that's not the way it works. Lazy IO requires the use of unsafeInterleaveIO, which is, well, unsafe. Pure functions in Haskell can safely be lazy, not so with IO. If you don't believe me, you can read more about it here: http://okmij.org/ftp/Streams.html#iteratee

Michael
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe
<Prev in Thread] Current Thread [Next in Thread>