
Hi Alia, Here's my suggestion. It does compile. Of course, there are lots of ways to approach this kind of thing. My choice was to refactor it so that the Answer type contains the correct answer and the possible answers, as appropriate. Then when you write the method that prompts the user for an answer, and the method that checks the user's answer, you can pattern match on the Answer type. ----- module Main where data Answer = Open | Test { correctIntAnswer :: Int } | Choice { correctStringAnswer :: Int, options :: [(String, String)] } deriving (Show, Eq) data Question = Question { questionName :: String , questionText :: String , answer :: Answer } deriving (Show, Eq) data QuestionSet = QuestionSet { qsetTitle :: String , qsetQuestions :: [Question] } deriving (Show, Eq) data Questionnaire = Questionnaire { questionnaireTitle :: String , questionnaireQuestionSets :: [QuestionSet] } deriving (Show, Eq) q1 = Question { questionName = "q1" , questionText = "What is our name?" , answer = Open } q2 = Question { questionName = "q2" , questionText = "What is 1+1?" , answer = Test 2 } q3 = Question { questionName = "q2" , questionText = "What is 2+1?" , answer = Choice 3 [("1", "2"), ("2", "3"), ("3", "4")] } qset = QuestionSet { qsetTitle = "simple questions" , qsetQuestions = [q1, q2, q3] } questionnaire = Questionnaire { questionnaireTitle = "a questionnaire" , questionnaireQuestionSets = [qset] }