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.

BSD-3-Clause 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