module date import StdEnv, StdHtml // (c) MJP 2007 // findDate will settle a date and time between two persons that want to meet // first a person is chosen by the person taken the initiative, person 0 // then a date is settled by the two persons by repeatedly asking each other for a convenient date // if such a date is found both have to confirm the date and the task is finished npersons = 5 Start world = doHtmlServer (multiUserTask npersons True findDate) world findDate :: Task (HtmlDate,HtmlTime) findDate = [Txt "Choose person you want to date:",Br] ?>> editTask "Set" (PullDown (1,100) (0,[toString i \\ i <- [1..npersons]])) =>> \whomPD -> let whom = toInt(toString whomPD) in [Txt "Determining date:",Br,Br] ?>> findDate` whom (Date 1 1 2007,Time 9 0 0) =>> \datetime -> [] ?>> confirm 0 whom datetime -&&- confirm whom 0 datetime #>> return_V datetime where findDate` :: Int (HtmlDate,HtmlTime) -> Task (HtmlDate,HtmlTime) findDate` whom daytime = proposeDateTime daytime =>> \daytime -> ("Meeting Request",whom) @: determineDateTime daytime =>> \(ok,daytime) -> if ok (return_V daytime) ( isOkDateTime daytime =>> \ok -> if ok (return_V daytime) (newTask "findDate`" (findDate` whom daytime)) ) where proposeDateTime :: (HtmlDate,HtmlTime) -> Task (HtmlDate,HtmlTime) proposeDateTime (date,time) = [Txt "Propose a new date and time for meeting",Br,Br] ?>> editTask "Set" input =>> \(_,date,_,time) -> return_V (date,time) where input = (showHtml [Txt "date: "], date, showHtml [Txt "time: "], time) determineDateTime :: (HtmlDate,HtmlTime) -> Task (Bool,(HtmlDate,HtmlTime)) determineDateTime daytime = isOkDateTime daytime =>> \ok -> if ok (return_V (ok,daytime)) ( proposeDateTime daytime =>> \daytime -> return_V (ok,daytime) ) isOkDateTime :: (HtmlDate,HtmlTime) -> Task Bool isOkDateTime (date,time) = [Txt ("Can we meet on the " <+++ date <+++ " at " <+++ time <+++ "?"),Br] ?>> chooseTask [ ("Accept",return_V True) , ("Sorry", return_V False) ] confirm :: Int Int (HtmlDate,HtmlTime) -> Task Void confirm me you (date,time) = me @:: [Txt ("User " <+++ me <+++ " and " <+++ you <+++ " have a meeting on " <+++ date <+++ " at " <+++ time),Br,Br] ?>> editTask "OK" Void