regular-web-0.1: regular-web.cabal
Name: regular-web
Version: 0.1
Synopsis: Generic programming for the web
License: BSD3
License-file: LICENSE
Category: Generics, Web
Copyright: (c) Chris Eidhof
Author: Chris Eidhof
Maintainer: Chris Eidhof <chris+hackage@eidhof.nl>
Homepage: http://github.com/chriseidhof/basil
Exposed-Modules: Generics.Regular.Formlets
, Generics.Regular.Views
, Generics.Regular.JSON
Other-Modules: Generics.Regular.Extras
Build-Type: Simple
hs-source-dirs: src
Build-Depends: base >= 4 && < 5,
mtl,
xhtml,
formlets == 0.6.1,
applicative-extras,
regular >= 0.1.0.2,
fclabels >= 0.4.2,
json >= 0.4.3
Description:
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