regular-web

Generic programming for the web http://github.com/chriseidhof/regular-web

Latest on Hackage:0.1.1

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

BSD3 licensed by Chris Eidhof
Maintained by Chris Eidhof

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.

  1. http://hackage.haskell.org/package/regular

  2. 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
comments powered byDisqus