[Haskell-cafe] Web application interface
michael at snoyman.com
Thu Jan 14 07:14:12 EST 2010
On Thu, Jan 14, 2010 at 1:58 PM, Alberto G. Corona <agocorona at gmail.com>wrote:
> 2010/1/14 Michael Snoyman <michael at snoyman.com>
>> On Thu, Jan 14, 2010 at 1:20 PM, Alberto G. Corona <agocorona at gmail.com>wrote:
>>> 2010/1/14 Michael Snoyman <michael at snoyman.com>
>>>> 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.
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe