{-# LANGUAGE DeriveLift #-} {-# LANGUAGE DeriveGeneric #-} {- | Types used in exigo programs. -} module Exigo.Types where import Data.Aeson import Data.Text ( Text ) import GHC.Generics import Language.Haskell.TH.Syntax (Lift) import Instances.TH.Lift () -- | a question (smallest assessable unit) -- in an assessment data Question = Question { qid :: Text -- ^ textual id, e.g. 1(a) , qDesc :: Text -- ^ possible descriptive text , qMarks :: Int -- ^ maximum marks } deriving (Eq, Show, Lift, Generic) -- Lift instance is so we can convert questions -- from "compile time" to actual values. -- | metadata about an assessment. data AssessmentMetadata = AssessmentMetadata { assessmentTitle :: Text , assessmentQuestions :: [Question] } deriving (Eq, Show, Lift, Generic) instance FromJSON Question where instance ToJSON Question where instance FromJSON AssessmentMetadata where instance ToJSON AssessmentMetadata where