This package implements generic functions for web programming.
Based on the regular
library [1], we provide generic functions for generating HTML
, Formlets
, and JSON
.
For a larger example, see the Example.lhs
[2] file on github.
http://hackage.haskell.org/package/regular
http://github.com/chriseidhof/regular-web/blob/master/Example.lhs
Example
Consider the following datatypes:
data Person = Person {
_name :: String
, _age :: Int
, _isMale :: Bool
, _place :: Place
}
data Place = Place {
_city :: String
, _country :: String
, _continent :: String
}
We can now derive a Regular
instance for the Person
datatype using Template
Haskell:
$(deriveAll ''Place "PFPlace")
$(deriveAll ''Person "PFPerson")
type instance PF Place = PFPlace
type instance PF Person = PFPerson
We can construct an example person:
location :: Place
location = Place "Utrecht" "The Netherlands" "Europe"
chris :: Person
chris = Person "chris" 25 True location
And, as an example, we can generate |HTML| and |JSON| values:
locationHtml :: X.Html
locationHtml = ghtml location
personHtml :: X.Html
personHtml = ghtml chris
locationJSON :: JSValue
locationJSON = gto location