packages feed

named-records-0.4: examples/Sample.hs

{-# LANGUAGE Haskell2010
    , TemplateHaskell
    , FlexibleContexts
    , TypeOperators
    , Trustworthy
 #-}
-- {-# OPTIONS -ddump-splices #-}

module Main where

import Data.NamedRecord
import Data.Word


import Sample2

name "firstName"
name "lastName"
name "loginName"
name "password"


record "User"
    `extends` __Person
    `extends` __Account

    `has` "id"           := ''Word64
    `has` "emailAddress" := ''String


julian = newPerson `set` firstName := "Julian"
                   `set` lastName  := "Fleischer"

alexander = newUser `set` firstName := "Alexander"
                    `set` lastName  := "Carnicero"
                    `set` loginName := "alexander.carnicero"

displayName obj = (obj `get` firstName) ++ " " ++ (obj `get` lastName)

something :: (Property o $(nameT "firstName") String,
              Property o $(nameT "lastName")  String)
          => o -> String
something = displayName