singletons-2.3: tests/compile-and-dump/GradingClient/Main.hs
{- GradingClient.hs
(c) Richard Eisenberg 2012
rae@cs.brynmawr.edu
This file accesses the database described in Database.hs and performs
some basic queries on it.
-}
{-# LANGUAGE TemplateHaskell, DataKinds #-}
module Main where
import Data.Singletons
import Data.Singletons.TH
import Data.Singletons.Prelude.List
import GradingClient.Database
$(singletons [d|
lastName, firstName, yearName, gradeName, majorName :: [AChar]
lastName = [CL, CA, CS, CT]
firstName = [CF, CI, CR, CS, CT]
yearName = [CY, CE, CA, CR]
gradeName = [CG, CR, CA, CD, CE]
majorName = [CM, CA, CJ, CO, CR]
gradingSchema :: Schema
gradingSchema = Sch [Attr lastName STRING,
Attr firstName STRING,
Attr yearName NAT,
Attr gradeName NAT,
Attr majorName BOOL]
names :: Schema
names = Sch [Attr firstName STRING,
Attr lastName STRING]
|])
main :: IO ()
main = do
h <- connect "grades" sGradingSchema
let ra = Read h
allStudents <- query $ Project sNames ra
putStrLn $ "Names of all students: " ++ (show allStudents) ++ "\n"
majors <- query $ Select (Element sGradingSchema sMajorName) ra
putStrLn $ "Students in major: " ++ (show majors) ++ "\n"
b_students <-
query $ Project sNames $
Select (LessThan (Element sGradingSchema sGradeName) (LiteralNat 90)) ra
putStrLn $ "Names of students with grade < 90: " ++ (show b_students) ++ "\n"