-- | This module defines exercises for each of the course lessons.
module Study.Courses.English.Grammar.Crash.Exercises where

import Core
import Study.Framework.Lojban.ExerciseGenerators
import Study.Courses.English.Grammar.Crash.Translations
import Study.Courses.English.Grammar.Crash.Vocabulary
import Util (combineGenerators)

-- For now, let's just reuse the strategies from the "Introduction" course.
import Study.Courses.English.Grammar.Introduction.Strategies (sentenceCanonicalizer, sentenceComparer)

-- * Exercises
-- | Exercises for the first lesson.
exercises01 :: ExerciseGenerator
exercises01 :: ExerciseGenerator
exercises01 =
    [(Int, ExerciseGenerator)] -> ExerciseGenerator
forall a. [(Int, StdGen -> a)] -> StdGen -> a
combineGenerators
        [ (Int
10, ExerciseGenerator
translationExercises)
        ]
    where
        vocabulary :: Vocabulary
vocabulary = Vocabulary
vocabulary01_cumulative
        translationExercises :: ExerciseGenerator
translationExercises = SentenceCanonicalizer
-> SentenceComparer -> TranslationGenerator -> ExerciseGenerator
generateTranslationExercise SentenceCanonicalizer
sentenceCanonicalizer SentenceComparer
sentenceComparer TranslationGenerator
translations01

-- * Exercises
-- | Exercises for the second lesson.
exercises02 :: ExerciseGenerator
exercises02 :: ExerciseGenerator
exercises02 =
    [(Int, ExerciseGenerator)] -> ExerciseGenerator
forall a. [(Int, StdGen -> a)] -> StdGen -> a
combineGenerators
        [ (Int
10, ExerciseGenerator
translationExercises)
        ]
    where
        vocabulary :: Vocabulary
vocabulary = Vocabulary
vocabulary02_cumulative
        translationExercises :: ExerciseGenerator
translationExercises = SentenceCanonicalizer
-> SentenceComparer -> TranslationGenerator -> ExerciseGenerator
generateTranslationExercise SentenceCanonicalizer
sentenceCanonicalizer SentenceComparer
sentenceComparer TranslationGenerator
translations02

-- * Exercises
-- | Exercises for the third lesson.
exercises03 :: ExerciseGenerator
exercises03 :: ExerciseGenerator
exercises03 =
    [(Int, ExerciseGenerator)] -> ExerciseGenerator
forall a. [(Int, StdGen -> a)] -> StdGen -> a
combineGenerators
        [ (Int
10, ExerciseGenerator
translationExercises)
        , (Int
10, Integer -> ExerciseGenerator
generateBasicNumberExercise Integer
999)
        ]
    where
        vocabulary :: Vocabulary
vocabulary = Vocabulary
vocabulary03_cumulative
        translationExercises :: ExerciseGenerator
translationExercises = SentenceCanonicalizer
-> SentenceComparer -> TranslationGenerator -> ExerciseGenerator
generateTranslationExercise SentenceCanonicalizer
sentenceCanonicalizer SentenceComparer
sentenceComparer TranslationGenerator
translations03