, . . . Intead , , . , , , (, , , ), , .
isCorrectAnswer. Bool, Bool , Bool. , Refl True/False. Maybe Dec. Maybe, , , , Dec Maybe. Dec , , , .
, :
isCorrectAnswer : (q: Question) -> (a: Answer q) -> expected q = option a
, - .
- - , .
Question Answer, , - , . , . . - ,
expected Question . , - , . expected . numOptions - Question. . Question .
2, :
record Question (numOptions : Nat) where
constructor QCM
question : String
qcmOptions : Vect numOptions String
expected : Fin numOptions
record Answer (q : Question n) where
constructor AnswerQCM
option : Fin n
, :
data IsCorrectAnswer : (q : Question n) -> (a: Answer q) -> Type where
IsCorrect : {q: Question n}
-> {a: Answer q}
-> expected q = option a
-> IsCorrectAnswer q a
:
isCorrectAnswer : (q : Question n) -> (a: Answer q) -> Dec (IsCorrectAnswer q a)
isCorrectAnswer (QCM _ _ expected) (AnswerQCM option) =
case decEq expected option of
Yes prf => Yes (IsCorrect prf)
No contra => No (\(IsCorrect prf) => contra prf)
String Question, Answer Question. , qcmOptions, Fin index, Dec isCorrectAnswer. , . , . - , , .
s: String (option : Fin n) . , . IsAnswer , Elem Vect. isCorrectAnswer:
data IsAnswer : (s : String) -> (q : Question n) -> Type where
ValidQCM : {q: Question n} -> Elem s (qcmOptions q) -> IsAnswer s q
readAnswer : (s : String) -> (q: Question n) -> Dec (IsAnswer s q)
readAnswer s (QCM _ options _) = case isElem s options of
Yes prf => Yes (ValidQCM prf)
No contra => No (\(ValidQCM prf) => contra prf)
, isCorrectAnswer , , , - , . . .
P.S. , , , .