N
Size: a a a
N
[
OS
[
OS
OS
IK
IK
N
IK
[TypeGradeBlock "Advanced Level GCE" ["B","A","A*"], TypeGradeBlock "Unified State Exam" [1..100]]то необходимо придумать какой то общий тип для списков.
IO
isBetterGrade :: a -> a -> Bool, e.g isBetterGrade 100 50 = True, isBetterGrade "A*" "A" = True, я бы сделал классclass Show a => Grade a whereи хранил экзистенциал
isBetterGrade :: a -> a -> Bool
instance Grade Int ...
instance Grade Text ... -- better data MyGrade = B | A | AStar
data TypeGradeBlock a = ...Тогда после матчинга по
data SomeGradeBlock = forall a . Grade a => SomeGradeBlock (TypeGradeBlock a)
list :: [SomeGradeBlock]
list = [SomeGradeBlock $ TypeGradeBlock "Advanced Level GCE" ["B","A","A*"], SomeGradeBlock $ TypeGradeBlock "Unified State Exam" [1..100]]
SomeGradeBlock какой именно у нас a мы не знаем, но знаем, что он инстанс GradeIK
IK