+++ /dev/null
-module skeleton4\r
-\r
-import iTasks\r
-\r
-/*\r
- Pieter Koopman, pieter@cs.ru.nl\r
- Advanced Programming. Skeleton for assignment 4 in 2018\r
- - use this a project with environment iTasks\r
- - executable must be in Examples/iTasks or a subdirectory\r
- You can also use the -sdk commandline flag to set the path\r
-*/\r
-\r
-:: Student =\r
- { name :: String\r
- , snum :: Int\r
- , bama :: BaMa\r
- , year :: Int\r
- }\r
-\r
-:: BaMa = Bachelor | Master\r
-\r
-students :: [Student]\r
-students =\r
- [{name = "Alice"\r
- ,snum = 1000\r
- ,bama = Master\r
- ,year = 1\r
- }\r
- ,{name = "Bob"\r
- ,snum = 1003\r
- ,bama = Master\r
- ,year = 1\r
- }\r
- ,{name = "Carol"\r
- ,snum = 1024\r
- ,bama = Master\r
- ,year = 2\r
- }\r
- ,{name = "Dave"\r
- ,snum = 2048\r
- ,bama = Master\r
- ,year = 1\r
- }\r
- ,{name = "Eve"\r
- ,snum = 4096\r
- ,bama = Master\r
- ,year = 1\r
- }\r
- ,{name = "Frank"\r
- ,snum = 1023\r
- ,bama = Master\r
- ,year = 1\r
- }\r
- ]\r
-\r
-student :: Student\r
-student = students !! 0\r
-\r
-derive class iTask Student, BaMa\r
-derive gToString Student, BaMa\r
-\r
-generic gToString a :: a -> String\r
-gToString{|Int|} i = toString i\r
-gToString{|String|} s = s\r
-gToString{|UNIT|} _ = ""\r
-gToString{|RECORD|} fx (RECORD x) = "{" + fx x + "}"\r
-gToString{|FIELD of {gfd_name}|} fx (FIELD x) = gfd_name + "=" + fx x + " "\r
-gToString{|PAIR|} fx fy (PAIR x y) = fx x + fy y\r
-gToString{|EITHER|} fx fy (LEFT x) = fx x\r
-gToString{|EITHER|} fx fy (RIGHT y) = fy y\r
-gToString{|CONS of {gcd_name}|} fx (CONS x) = gcd_name + fx x\r
-gToString{|OBJECT|} fx (OBJECT x) = fx x\r
-\r
-instance + String where + s t = s +++ t\r
-\r
-Start w = doTasks (changeNameEdcomb student) w\r
-\r
-enterStudent :: Task Student\r
-enterStudent = enterInformation "Enter a student" []\r
-\r
-enterStudentList :: Task [Student]\r
-enterStudentList = enterInformation "Enter a student" []\r
-\r
-updateStudent :: (Student -> Task Student)\r
-updateStudent = updateInformation "Update a student" []\r
-\r
-selectStudent :: ([Student] -> Task Student)\r
-selectStudent = enterChoice "Pick a student" []\r
-\r
-selectStudentOnlyName :: ([Student] -> Task Student)\r
-selectStudentOnlyName = enterChoice "Pick a student" [ChooseFromDropdown \{Student|name}->name]\r
-\r
-selectStudentFormat :: ([Student] -> Task Student)\r
-selectStudentFormat = enterChoice "Pick a student" [ChooseFromDropdown gToString{|*|}]\r
-\r
-selectPartner :: ([Student] -> Task [Student])\r
-selectPartner = enterMultipleChoice "Pick a partner" [ChooseFromDropdown \{name,bama}->name + "(" + gToString{|*|} bama + ")"]\r
-\r
-changeName :: Student -> Task Student\r
-changeName s\r
- = viewInformation "Student to change" [] s\r
- ||- updateInformation "New name" [UpdateAs (\{Student|name}->name) (\s n->{Student | s & name=n})] s\r
-\r
-changeNameEdcomb :: Student -> Task Student\r
-changeNameEdcomb s\r
- = updateInformation "New name" [UpdateUsing id (\_ v->v) nameEditor] s\r
-where\r
- nameEditor :: Editor Student\r
- nameEditor = bijectEditorValue\r
- (\{name=n,snum=s,bama=b,year=y}->(n, s, b, y))\r
- (\(n,s,b,y)->{name=n,snum=s,bama=b,year=y})\r
- (container4\r
- (gEditor{|*|} <<@ labelAttr "name")\r
- (withChangedEditMode toView gEditor{|*|} <<@ labelAttr "snum")\r
- (withChangedEditMode toView gEditor{|*|} <<@ labelAttr "bama")\r
- (withChangedEditMode toView gEditor{|*|} <<@ labelAttr "year")\r
- )\r
-\r
- toView (Update a) = View a\r
- toView v = v\r