From cec2d19d858f1955cfa9fcdceff68770ef6d53cf Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Tue, 10 Oct 2017 00:30:19 +0200 Subject: Assignment 5 --- assignment-5/skeleton5.icl | 52 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) (limited to 'assignment-5/skeleton5.icl') 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 -- cgit v1.2.3