module travel import StdEnv, htmlTask, htmlTrivial // (c) 2007 MJP // Test for multiple choice // One can choose to book a flight, hotel and / or a car // One by one the chosen bookings will be handled // The bill is made up in the end derive gForm [] derive gUpd [] Start world = doHtmlServer (singleUserTask 0 True (foreverTask travel)) world travel :: (Task Void) travel = [Txt "Book your journey:",Br,Br] ?>> seqTasks [ ( "Choose Booking options:" , mchoiceTasks [ ("Book_Flight",BookFlight) , ("Book_Hotel", BookHotel) , ("Book_Car", BookCar) ] ) , ( "Confirm Booking:" , buttonTask "Confirm" (return_V []) ) ] -||- buttonTask "Cancel" (return_V []) =>> \booking -> [Txt "Handling bookings:",Br,Br] ?>> handleBookings booking where handleBookings booking | isNil booking = editTask "Cancelled" Void | otherwise = editTask "Pay" (Dsp (calcCosts booking)) #>> editTask "Paid" Void where calcCosts booked = sum [cost \\ (_,_,_,cost) <- hd booked] isNil [] = True isNil _ = False BookFlight = editTask "BookFlight" (Dsp "Flight Number","",Dsp "Costs",0) <<@ Submit BookHotel = editTask "BookHotel" (Dsp "Hotel Name","",Dsp "Costs",0) <<@ Submit BookCar = editTask "BookCar" (Dsp "Car Brand","",Dsp "Costs",0) <<@ Submit Dsp = DisplayMode