summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assignment-5/skeleton5.icl52
1 files changed, 51 insertions, 1 deletions
diff --git a/assignment-5/skeleton5.icl b/assignment-5/skeleton5.icl
index 37115e4..fd9720d 100644
--- a/assignment-5/skeleton5.icl
+++ b/assignment-5/skeleton5.icl
@@ -20,7 +20,39 @@ import iTasks
:: BaMa = Bachelor | Master
-Start w = 42
+derive class iTask Student, BaMa
+
+Start w = startEngine (task8 (hd students)) w
+
+task1 :: Task Student
+task1 = enterInformation (Title "Enter a student") []
+
+task2 :: Task [Student]
+task2 = enterInformation (Title "Enter some students") []
+
+task3 :: (Student -> Task Student)
+task3 = updateInformation (Title "Update the student") []
+
+task4 :: Task Student
+task4 = enterChoice (Title "Pick a student") [] students
+
+task5 :: Task Student
+task5 = enterChoice (Title "Pick a student") [ChooseFromDropdown \s -> s.Student.name] students
+
+task6 :: Task Student
+task6 = enterChoice (Title "Pick a student") [ChooseFromDropdown gToString{|*|}] students
+
+task7 :: Task [Student]
+task7 = enterMultipleChoice (Title "Pick some partners") [ChooseFromCheckGroup show] students
+where show s = s.Student.name + " (" + gToString{|*|} s.bama + ")"
+
+// I suppose there is a nicer way for this, perhaps using withEditMode?
+// But then how to select the fields for which the View mode applies?
+task8 :: Student -> Task Student
+task8 s = updateInformation
+ (Title ("Update the student: " + gToString{|*|} s))
+ [UpdateAs (\s -> s.Student.name) (\s n -> {Student | s & name=n})]
+ s
students :: [Student]
students =
@@ -57,5 +89,23 @@ students =
]
generic gToString a :: a -> String
+gToString{|Int|} x = toString x
+gToString{|String|} x = x
+gToString{|UNIT|} UNIT = ""
+gToString{|PAIR|} fx fy (PAIR x y) = fx x + " " + fy y
+gToString{|EITHER|} fx fy (LEFT x) = fx x
+gToString{|EITHER|} fx fy (RIGHT y) = fy y
+gToString{|CONS of d|} fx (CONS x)
+| d.gcd_arity == 0 = d.gcd_name
+| otherwise = d.gcd_name + " " + fx x
+gToString{|OBJECT|} fx (OBJECT x) = fx x
+gToString{|FIELD of f|} fx (FIELD x) = f.gfd_name + ": " + fx x + next
+where
+ next
+ | f.gfd_index == f.gfd_cons.grd_arity - 1 = ""
+ | otherwise = "; "
+gToString{|RECORD|} fx (RECORD x) = fx x
+
+derive gToString Student, BaMa
instance + String where + s t = s +++ t