{-# 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