[Haskell-beginners] Getting warp and blaze to like each other

Adrian May adrian.alexander.may at gmail.com
Tue Jul 9 15:16:45 CEST 2013


Thanks! That's fantastic. Now I try to master that <*> trick to get
something out of a post and then see if HaskellDB wants to eat it.

Adrian.



On 9 July 2013 18:03, Michael Snoyman <michael at snoyman.com> wrote:

> I've put together a more efficient version on School of Haskell:
>
>
> https://www.fpcomplete.com/user/snoyberg/random-code-snippets/wai-blaze-html
>
> The differences from yours are:
>
>    - Instead of turning your H.Html into a lazy ByteString and then into
>    a Builder, this code goes directly to a Builder via renderHtmlBuilder.
>    - No content-length header is included in the output, since that would
>    require rendering the builder to a lazy bytestring, which would be an
>    unnecessary buffer copy.
>    - Doesn't use BS.pack, since OverloadedStrings makes it unnecessary.
>
>
>
> On Tue, Jul 9, 2013 at 11:44 AM, Adrian May <
> adrian.alexander.may at gmail.com> wrote:
>
>> Hi All,
>>
>> I just cobbled together the code below from a couple of samples, but got
>> the types matched up by trial and error. I don't really understand when
>> things are getting converted between lazy, strict, utf8, ascii, etc. I
>> don't want ascii in the served page at all. Is it optimal?
>>
>> TIA,
>> Adrian
>>
>> {-# LANGUAGE OverloadedStrings #-}
>>
>> module Main where
>>
>> import Network.Wai (Application, Response (ResponseBuilder))
>> import Network.HTTP.Types (status200)
>> import Network.HTTP.Types.Header (hContentType, hContentLength,
>> hConnection)
>> import Network.Wai.Handler.Warp (run)
>> import Blaze.ByteString.Builder (fromByteString, fromLazyByteString)
>> import qualified Data.ByteString.Char8 as BS (pack, length)
>>
>> import qualified Text.Blaze.Html5 as H
>> import qualified Text.Blaze.Html5.Attributes as A
>> import Text.Blaze.Html.Renderer.Utf8
>>
>> import qualified Data.ByteString.Lazy as LB
>>
>> application:: Application
>> application _ = return $
>>     ResponseBuilder status200 [(hContentType, BS.pack "text/html"),
>>                                (hContentLength, BS.pack bodyLen),
>>                                (hConnection, BS.pack "keep-alive")]
>>                     $ fromLazyByteString body
>>     where body = root
>>           bodyLen = show. LB.length $ body
>>
>> root = renderHtml rooth
>>
>> rooth :: H.Html
>> rooth = H.docTypeHtml $ do
>>     H.body $ do
>>         H.h1 "Hello"
>>
>> main:: IO ()
>> main = run 8080 application
>>
>>
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://www.haskell.org/mailman/listinfo/beginners
>>
>>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20130709/b16ff347/attachment.htm>


More information about the Beginners mailing list