{-# LANGUAGE OverloadedStrings #-}
module Study.Courses.English.Vocabulary.Attitudinals.Exercises where
import Core
import Util (shuffle, chooseItemUniformly, combineGeneratorsUniformly, mapRandom)
import Study.Courses.English.Vocabulary.Attitudinals.Model
import Study.Courses.English.Vocabulary.Attitudinals.Vocabulary
import Study.Courses.English.Vocabulary.Attitudinals.Util
import qualified Data.Text as T
generatePositiveAttitudinalBackwardMeaningExercise :: [Attitudinal] -> ExerciseGenerator
generatePositiveAttitudinalBackwardMeaningExercise :: [Attitudinal] -> ExerciseGenerator
generatePositiveAttitudinalBackwardMeaningExercise [Attitudinal]
attitudinals StdGen
r0 = Text -> [ExerciseSentence] -> (Text -> Bool) -> Text -> Exercise
TypingExercise Text
title [] (Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
expectedAttitudinal) (Text
expectedAttitudinal) where
(Attitudinal
attitudinal, StdGen
r1) = StdGen -> [Attitudinal] -> (Attitudinal, StdGen)
forall a. StdGen -> [a] -> (a, StdGen)
chooseItemUniformly StdGen
r0 [Attitudinal]
attitudinals
title :: Text
title = Text
"Provide the attitudinal for <b>" Text -> Text -> Text
`T.append` (Attitudinal -> Text
attitudinalPositiveMeaning Attitudinal
attitudinal) Text -> Text -> Text
`T.append` Text
"</b>"
expectedAttitudinal :: Text
expectedAttitudinal = Attitudinal -> Text
attitudinalWord Attitudinal
attitudinal
generatePositiveAttitudinalForwardMeaningExercise :: [Attitudinal] -> ExerciseGenerator
generatePositiveAttitudinalForwardMeaningExercise :: [Attitudinal] -> ExerciseGenerator
generatePositiveAttitudinalForwardMeaningExercise [Attitudinal]
attitudinals StdGen
r0 = Text -> [ExerciseSentence] -> Text -> [Text] -> Bool -> Exercise
SingleChoiceExercise Text
title [] Text
correctMeaning [Text]
incorrectMeanings Bool
False where
(Attitudinal
correctAttitudinal, StdGen
r1) = StdGen -> [Attitudinal] -> (Attitudinal, StdGen)
forall a. StdGen -> [a] -> (a, StdGen)
chooseItemUniformly StdGen
r0 [Attitudinal]
attitudinals
incorrectAttitudinals :: [Attitudinal]
incorrectAttitudinals = (Attitudinal -> Bool) -> [Attitudinal] -> [Attitudinal]
forall a. (a -> Bool) -> [a] -> [a]
filter (Attitudinal -> Attitudinal -> Bool
forall a. Eq a => a -> a -> Bool
/= Attitudinal
correctAttitudinal) [Attitudinal]
attitudinals
([Attitudinal]
shuffledIncorrectAttitudinals, StdGen
r2) = StdGen -> [Attitudinal] -> ([Attitudinal], StdGen)
forall a. StdGen -> [a] -> ([a], StdGen)
shuffle StdGen
r1 [Attitudinal]
incorrectAttitudinals
title :: Text
title = Text
"Select the meaning of <b>" Text -> Text -> Text
`T.append` (Attitudinal -> Text
attitudinalWord Attitudinal
correctAttitudinal) Text -> Text -> Text
`T.append` Text
"</b>"
correctMeaning :: Text
correctMeaning = Attitudinal -> Text
attitudinalPositiveMeaning Attitudinal
correctAttitudinal
incorrectMeanings :: [Text]
incorrectMeanings = (Attitudinal -> Text) -> [Attitudinal] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map Attitudinal -> Text
attitudinalPositiveMeaning (Int -> [Attitudinal] -> [Attitudinal]
forall a. Int -> [a] -> [a]
take Int
4 [Attitudinal]
incorrectAttitudinals)
generateAttitudinalBackwardMeaningExercise :: [Attitudinal] -> ExerciseGenerator
generateAttitudinalBackwardMeaningExercise :: [Attitudinal] -> ExerciseGenerator
generateAttitudinalBackwardMeaningExercise [Attitudinal]
attitudinals StdGen
r0 = Text -> [ExerciseSentence] -> (Text -> Bool) -> Text -> Exercise
TypingExercise Text
title [] (Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
expectedAttitudinalExpression) (Text
expectedAttitudinalExpression) where
(Attitudinal
attitudinal, StdGen
r1) = StdGen -> [Attitudinal] -> (Attitudinal, StdGen)
forall a. StdGen -> [a] -> (a, StdGen)
chooseItemUniformly StdGen
r0 [Attitudinal]
attitudinals
(Text
attitudinalModifier, Text
meaningOfModifiedAttitudinal, StdGen
r2) = StdGen -> Attitudinal -> (Text, Text, StdGen)
randomlyPickAttitudinalModifier StdGen
r1 Attitudinal
attitudinal
expectedAttitudinalExpression :: Text
expectedAttitudinalExpression = (Attitudinal -> Text
attitudinalWord Attitudinal
attitudinal) Text -> Text -> Text
`T.append` Text
attitudinalModifier
title :: Text
title = Text
"Provide the attitudinal expression for <b>" Text -> Text -> Text
`T.append` Text
meaningOfModifiedAttitudinal Text -> Text -> Text
`T.append` Text
"</b>"
generateAttitudinalForwardMeaningExercise :: [Attitudinal] -> ExerciseGenerator
generateAttitudinalForwardMeaningExercise :: [Attitudinal] -> ExerciseGenerator
generateAttitudinalForwardMeaningExercise [Attitudinal]
attitudinals StdGen
r0 = Text -> [ExerciseSentence] -> Text -> [Text] -> Bool -> Exercise
SingleChoiceExercise Text
title [] Text
correctMeaning [Text]
incorrectMeanings Bool
False where
title :: Text
title = Text
"Select the meaning of <b>" Text -> Text -> Text
`T.append` Text
correctAttitudinalExpression Text -> Text -> Text
`T.append` Text
"</b>"
(Attitudinal
correctAttitudinal, StdGen
r1) = StdGen -> [Attitudinal] -> (Attitudinal, StdGen)
forall a. StdGen -> [a] -> (a, StdGen)
chooseItemUniformly StdGen
r0 [Attitudinal]
attitudinals
(Text
correctAttitudinalModifier, Text
meaningOfModifiedCorrectAttitudinal, StdGen
r2) = StdGen -> Attitudinal -> (Text, Text, StdGen)
randomlyPickAttitudinalModifier StdGen
r1 Attitudinal
correctAttitudinal
correctAttitudinalExpression :: Text
correctAttitudinalExpression = (Attitudinal -> Text
attitudinalWord Attitudinal
correctAttitudinal) Text -> Text -> Text
`T.append` Text
correctAttitudinalModifier
correctMeaning :: Text
correctMeaning = Text
meaningOfModifiedCorrectAttitudinal
incorrectAttitudinals :: [Attitudinal]
incorrectAttitudinals = (Attitudinal -> Bool) -> [Attitudinal] -> [Attitudinal]
forall a. (a -> Bool) -> [a] -> [a]
filter (Attitudinal -> Attitudinal -> Bool
forall a. Eq a => a -> a -> Bool
/= Attitudinal
correctAttitudinal) [Attitudinal]
attitudinals
([Attitudinal]
shuffledIncorrectAttitudinals, StdGen
r3) = StdGen -> [Attitudinal] -> ([Attitudinal], StdGen)
forall a. StdGen -> [a] -> ([a], StdGen)
shuffle StdGen
r2 [Attitudinal]
incorrectAttitudinals
([Text]
incorrectMeanings, StdGen
r4) = StdGen
-> (StdGen -> Attitudinal -> (Text, StdGen))
-> [Attitudinal]
-> ([Text], StdGen)
forall a b.
StdGen -> (StdGen -> a -> (b, StdGen)) -> [a] -> ([b], StdGen)
mapRandom StdGen
r3 StdGen -> Attitudinal -> (Text, StdGen)
randomlyPickAttitudinalMeaning (Int -> [Attitudinal] -> [Attitudinal]
forall a. Int -> [a] -> [a]
take Int
4 [Attitudinal]
incorrectAttitudinals)
generateAttitudinalClassificationExercise :: [Attitudinal] -> ExerciseGenerator
generateAttitudinalClassificationExercise :: [Attitudinal] -> ExerciseGenerator
generateAttitudinalClassificationExercise [Attitudinal]
attitudinals StdGen
r0 = Text -> [ExerciseSentence] -> Text -> [Text] -> Bool -> Exercise
SingleChoiceExercise Text
title [] Text
correctClassification [Text
incorrectClassification] Bool
True where
title :: Text
title = Text
"Classify the attitudinal <b>" Text -> Text -> Text
`T.append` (Attitudinal -> Text
attitudinalWord Attitudinal
attitudinal) Text -> Text -> Text
`T.append` Text
"</b>"
(Attitudinal
attitudinal, StdGen
r1) = StdGen -> [Attitudinal] -> (Attitudinal, StdGen)
forall a. StdGen -> [a] -> (a, StdGen)
chooseItemUniformly StdGen
r0 [Attitudinal]
attitudinals
(Text
correctClassification, Text
incorrectClassification)
| (Attitudinal -> AttitudinalType
attitudinalType Attitudinal
attitudinal) AttitudinalType -> AttitudinalType -> Bool
forall a. Eq a => a -> a -> Bool
== AttitudinalType
PureEmotion = (Text
"Pure", Text
"Propositional")
| Bool
otherwise = (Text
"Propositional", Text
"Pure")
exercises1 :: ExerciseGenerator
exercises1 :: ExerciseGenerator
exercises1 = [ExerciseGenerator] -> ExerciseGenerator
forall a. [StdGen -> a] -> StdGen -> a
combineGeneratorsUniformly
[ [Attitudinal] -> ExerciseGenerator
generatePositiveAttitudinalBackwardMeaningExercise [Attitudinal]
attitudinals1
, [Attitudinal] -> ExerciseGenerator
generatePositiveAttitudinalForwardMeaningExercise [Attitudinal]
attitudinals1
]
exercises2 :: ExerciseGenerator
exercises2 :: ExerciseGenerator
exercises2 = [ExerciseGenerator] -> ExerciseGenerator
forall a. [StdGen -> a] -> StdGen -> a
combineGeneratorsUniformly
[ [Attitudinal] -> ExerciseGenerator
generatePositiveAttitudinalBackwardMeaningExercise [Attitudinal]
attitudinals2
, [Attitudinal] -> ExerciseGenerator
generatePositiveAttitudinalForwardMeaningExercise [Attitudinal]
attitudinals2
, [Attitudinal] -> ExerciseGenerator
generateAttitudinalClassificationExercise [Attitudinal]
attitudinals2_cumulative
]
exercises3 :: ExerciseGenerator
exercises3 :: ExerciseGenerator
exercises3 = [ExerciseGenerator] -> ExerciseGenerator
forall a. [StdGen -> a] -> StdGen -> a
combineGeneratorsUniformly
[ [Attitudinal] -> ExerciseGenerator
generateAttitudinalBackwardMeaningExercise [Attitudinal]
attitudinals3_cumulative
, [Attitudinal] -> ExerciseGenerator
generateAttitudinalForwardMeaningExercise [Attitudinal]
attitudinals3_cumulative
, [Attitudinal] -> ExerciseGenerator
generateAttitudinalClassificationExercise [Attitudinal]
attitudinals3_cumulative
]