[Haskell-cafe] Lazy IO.
sfvisser at cs.uu.nl
Sat Jun 14 13:27:58 EDT 2008
On Jun 14, 2008, at 7:16 PM, Felipe Lessa wrote:
> On Sat, Jun 14, 2008 at 1:50 PM, Sebastiaan Visser
> <sfvisser at cs.uu.nl> wrote:
>> Doesn't this imply that the parseHttpHeader must work on
>> ByteStrings instead
>> of regular Strings?
> I made the change because it's easier and faster to go from ByteString
> to String than the converse.
>> Maybe this works for HTTP headers, but sometimes
>> ByteStrings are not appropriate. Especially when you are not using
>> regular `System.IO.hGetContents' but the
> You may use the package encoding instead, take a look at . It will
> decode a lazy ByteString into a String. In your HTTP parsing example,
> you could break the ByteString on "\r\n\r\n" and then decodeLazy only
> the first part, while returning the second without modifying it.
Sounds interesting. This could indeed solve (a part of) my problem.
The thing is, when decoding the header - in my web server
architecture - it is not yet clear what should be done be the body.
Some `handlers' may want to have it as a String, UTF8 String,
ByteString or may not even need it at all.
>  http://hackage.haskell.org/packages/archive/encoding/0.4.1/doc/
Because HTTP headers are line based and the parser does not need any
look ahead - the first "\r\n\r\n" is the header delimiter - it might
be possible to use the hGetLine for the headers. After this I am
still `free' to decide what to do for the body:
Data.ByteString.Lazy.hGetContents, hClose, etc...
> -- Felipe.
More information about the Haskell-Cafe