[Haskell-cafe] Where to start about writing web/HTTP apps ?
thomasspriggs at hotmail.com
Sat Sep 10 19:44:04 EDT 2005
>From: gary ng <garyng2000 at yahoo.com>
>To: haskell-cafe at haskell.org
>Subject: [Haskell-cafe] Where to start about writing web/HTTP apps ?
>Date: Sat, 10 Sep 2005 04:15:45 -0700 (PDT)
>I just start learning haskell and have to say that it
>is stunning in how precise it can be(coming from a
>background of C then python/perl/js).
>I want to write apps for WEB and have briefly read
>WASH. However, that seems to be a CGI based solution.
>What I want is a native HTTP server(written in
>haskell), like Twisted/Cherrypy in Python. Are there
>any boilerplate(I know I should scrap the boilerplate
>but I need to have something to get start) for
>In addition, during my learning process, I keep on
>using my old experience as reference such as writing
>simple programs that needs functions like
>ltrim/rtrim/substr etc. that is in almost any language
>I have used. But it seems that haskell doesn't have
>it. I know that a haskell expert can write them in no
>time with things like dropWhile and reverse, it is a
>bit frustrating for new comers from a imperative
>Oh, while I am still here, I am reading "The Evolution
>of a Haskell Programmer"
>and learning the various way to tackle the same
>problem. Obviously, there are lots of things I don't
>know what it is about and I would tackle them as time
>go by. But I have problem even with the seems to be
>simple one like this :
I don't think its that simple.
>fac n = foldr (\x g n -> g (x*n)) id [1..n] 1
>I can understand a foldl or foldr version but have
>problem with this, especially the "id" and the
The id is the identity function defined
id x = x
>trailing "1" and the function being folded takes 3
>parameters instead of 2(as in standard foldr/foldl
For a start the previous standard fold solutions take 3 parameters not 2.
Its just the "fac n = foldr (\x g n -> g (x*n)) id [1..n] 1" example appears
to take 4. However it doesn't, foldr always takes 3 arguments.
foldr :: (a -> b -> b) -> b -> [a] -> b (from zvon reference)
In fact the foldr function actually returns a function in this case. It
could be rewritten as
fac n = (foldr (\x g n -> g (x*n)) id [1..n]) 1
with the additional brackets added for clarity.
>Would appreciate if someone can knock on my head and
>tell me what is going on in it.
Well, here goes. The way the lambda function/foldr thing evaluates, the
resulting foldl like function needs a new identity parameter hence the
additional "1". To demonstrate something like how this is evaluated for a
low number eg 3: (Please would someone correct me if I have made a mistake
fac 3 = (foldr (\x g n -> g (x*n)) id [1..3]) 1
fac 3 = (foldr (\x g n -> g (x*n)) id [1,2,3]) 1
fac 3 = (foldr (\x g n -> g (x*n)) (\n -> id (3*n)) [1,2])) 1
fac 3 = (foldr (\x g n -> g (x*n)) (\n -> (\n -> id (3*n)) (2*n)) ) 1
fac 3 = (foldr (\x g n -> g (x*n)) (\n -> (\n -> (\n -> id (3*n)) (2*n))
(1*n)) ) 1
fac 3 = (\n -> (\n -> (\n -> id (3*n)) (2*n)) (1*n)) 1
fac 3 = (\n -> (\n -> id (3*n)) (2*n)) (1*1)
fac 3 = (\n -> (\n -> id (3*n)) (2*n)) 1
fac 3 = (\n -> id (3*n)) (2*1)
fac 3 = (\n -> id (3*n)) 2
fac 3 = id (3*2)
fac 3 = id 6
fac 3 = 6
I would suggest that you use something other than the "evolution of a
haskell programmer" to learn haskell as the versions of factorial get
complicated very quickly and its largely use less as you should probably
fac n = product [1..n]
anyway. A better introduction would be something like
http://www.cse.unsw.edu.au/~cs1011/05s2/ and use
http://www.haskell.org/tutorial/ if you want to learn something in specific
or are strugling. All links from http://www.haskell.org/learning.html of
>thanks for help in advance.
>Click here to donate to the Hurricane Katrina relief effort.
>Haskell-Cafe mailing list
>askell-Cafe at haskell.org
Well good luck furthering your knowledge of haskell,
Be the first to hear what's new at MSN - sign up to our free newsletters!
More information about the Haskell-Cafe