I make a web application with Haskell.
It's a simple application.
You input your name, then the application output your name.
See below.


The other day I made the application without any library.
Today I make it with Network.CGI wich is included in GHC.
- import Network.CGI
-
- inputForm :: String -> String
- inputForm script = concat [
- "<form action=\"", script, "\" method=\"GET\">",
- "<p>Who are you?</p>",
- "<input type=\"text\" name=\"name\" />",
- "<input type=\"submit\" value=\"send\" />",
- "</form>"]
-
- putName :: String -> String
- putName name = concat ["<h1>Hello, ", name, "!</h1>"]
-
- body :: Maybe String -> String -> String
- body name script =
- case name of
- Just x -> putName x
- Nothing -> inputForm script
-
- html :: Maybe String -> String -> String
- html name script = concat [
- "<html>",
- "<head><title>Hello</title></head>",
- "<body>",
- body name script,
- "</body>",
- "</html>"]
-
- cgiMain :: CGI CGIResult
- cgiMain = do
- setHeader "Content-type" "text/html; charset = UTF-8"
- script <- scriptName
- name <- getInput "name"
- output $ html name script
-
- main :: IO ()
- main = runCGI (handleErrors cgiMain)
import Network.CGI
inputForm :: String -> String
inputForm script = concat [
"<form action=\"", script, "\" method=\"GET\">",
"<p>Who are you?</p>",
"<input type=\"text\" name=\"name\" />",
"<input type=\"submit\" value=\"send\" />",
"</form>"]
putName :: String -> String
putName name = concat ["<h1>Hello, ", name, "!</h1>"]
body :: Maybe String -> String -> String
body name script =
case name of
Just x -> putName x
Nothing -> inputForm script
html :: Maybe String -> String -> String
html name script = concat [
"<html>",
"<head><title>Hello</title></head>",
"<body>",
body name script,
"</body>",
"</html>"]
cgiMain :: CGI CGIResult
cgiMain = do
setHeader "Content-type" "text/html; charset = UTF-8"
script <- scriptName
name <- getInput "name"
output $ html name script
main :: IO ()
main = runCGI (handleErrors cgiMain)
Complete!