packages feed

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