@hackage hack2009.4.21
a sexy Haskell Webserver Interface
Categories
License
LicenseRef-GPL
Maintainer
Wang, Jinjing <nfjinjing@gmail.com>
Links
- Homepage
- Documentation
- No source repository
- Changelog
- Security
Versions
Deprecated
Dependencies (12)
Dependents (32)
@hackage/loli, @hackage/hledger, @hackage/bamboo-plugin-photo, @hackage/hack-handler-evhttp, @hackage/hack-middleware-clientsession, @hackage/hack-handler-simpleserver, Show all…
Hack: a sexy Haskell Webserver Interface
Hack is a lazy port of Rack: the ruby webserver interface.
What does a hack app look like
module Main where
import Hack
import Hack.Handler.Kibro
hello :: Application
hello = \env -> return $ Response
{ status = 200
, headers = [ ("Content-Type", "text/plain") ]
, body = "Hello World"
}
main = run hello
1 minute tutorial
Install Hack
cabal install hack
Install Kibro (the only handler at the moment)
cabal install kibro
Install lighttpd 1.4.19 (used by kibro)
wget http://www.lighttpd.net/download/lighttpd-1.4.19.tar.gz
tar zxfv lighttpd-1.4.19.tar.gz
cd lighttpd-1.4.19
./configure --prefix=$HOME
make
make install
Create a new Kibro project
kibro new hello-world
Test if Kibro works
cd hello-world
kibro start
Create our hack app
put the following code in src/Main.hs
module Main where
import Hack
import Hack.Handler.Kibro
hello :: Application
hello = \env -> return $ Response
{ status = 200
, headers = [ ("Content-Type", "text/plain") ]
, body = "Hello World"
}
main = run hello
restart kibro
kibro restart
demo usage of middle-ware
import Hack.SimpleRoute
import Hack.Utils
hello :: Application
hello = \env -> def {body = env.show} .return
app :: Application
app = route [("/hello", hello), ("", hello)] empty_app
main = run app
make a middle-ware
inside Hack.hs:
type MiddleWare = Application -> Application
since Haskell has curry, middle-ware api can be of type
Params -> Application -> Application
just pass an applied middle-ware into a chain.