Download de presentatie
De presentatie wordt gedownload. Even geduld aub
1
TOP met iTasks 2
2
Gebruik van return Een task levert een resultaat van type: Task a op waarbij a een Clean type is. Het is ook mogelijk iets van type Task a op te leveren zonder enterInformation o.i.d te gebruiken. Dit gaat mbv het return statement (dit is iets anders dan de return in Java, het is eigenlijk gewoon een functie)
3
Voorbeeld return recTasks :: Task Int recTasks = enterInformation "Geef positief getal " [] >>= herhaalTaak 0 herhaalTaak :: Int Int -> Task Int herhaalTaak a 0 = viewInformation “Som" [] a herhaalTaak a n = enterInformation "Getal" [] >>= \g->herhaalTaak (a+g) (n-1) Netter is: herhaalTaak a 0 = return a En in aanroep >>= herhaalTaak 0 a >>= \a -> viewInformation “Som" [] a
4
Hogere Orde Taken Een hogere orde taak is een taak die een taak als argument of als resultaat kan opleveren Hogere orde taken maken het mogelijk om algemene voorschriften (patronen) te maken die later met concrete taken kunnen worden ingevuld. doAndShow :: (Task a) -> Task a | iTask a doAndShow task = task >>= \a -> viewInformation "Het resultaat is" [] a
5
Hogere Orde Taken Mbv hogere orde constructies kan men algemene herhaal constructies maken. Herhaal een taak net zolang tot het resultaat aan een bepaalde conditie voldoet repeatTask :: (a -> Bool) (Task a) -> Task a | iTask a repeatTask cond task = task >>= \a -> if (cond a)(return a)(repeatTask cond task)
6
Hogere Orde Taken Gebruik repeatTask: getal raden
repeatExample :: Task Int repeatExample = enterInformation "Geef te raden getal" [] >>= \g -> repeatTask (\a -> a == g) (enterInformation "Raad het getal" [])
7
Kiezen Kiezen kan met enterChoice (kies 1) of enterMultipleChoice (kies meerdere) chooseExample :: Task Int chooseExample = enterChoice "Kies maar wat" [] [1..5] mchooseExample :: Task [Int] mchooseExample = enterMultipleChoice "Kies maar wat" [] [1..10]
8
And - Or iTasks heeft mogelijkheden om taken parallel uit te voeren. De simpelste zijn And en Or. Later volgen er nog anderen. //Simple And doBoth :: Task (Int,Int) doBoth = recTasks -&&- chooseExample //Simple Or doEither :: Task Int doEither = recTasks -||- chooseExample
9
Acties Normale enterInformation taken kunnen alleen met Ok afgesloten worden In de praktijk wil je ook taken kunnen annuleren e.d Dit kan met acties Voor veel voorkomende acties bestaan er handige shortcuts :: Action = Action String| ActionOk| ActionCancel| ActionYes| ActionNo|ActionQuit|ActionClose | …
10
Acties actionTest :: Task Int actionTest = updateInformation "Geef getal" [] 33 >>* [OnAction (Action "1") hasValue (return o getValue) ,Always (Action "2") (return 42) ,AnyTime (Action "3") f ,WithoutResult (Action "4") (return 43) ,WithResult (Action "5") (\a -> a > 5) (\a -> return (a+1)) ,WhenValid (\a -> a == 23) (\a -> return (a+2)) ,WhenStable (\a -> return (a+67))] where f (Just r) = return r f Nothing = return 42 hasValue (Value _ _) = True hasValue _ = False getValue (Value a _) = a
11
Acties Voorbeeld van handig gebruik van acties
Voer een aantal getallen na elkaar in tot de gebruiker het genoeg vindt. intList :: Task [Int] intList = enterInformation "Please fill in the form" [ ] >>* [Always (Action "Quit") (return []) ,WithResult (Action "Add one") (const True) (\p -> intList >>= \ps -> return [p:ps]) ,WithResult (Action "Done") (const True) (\p -> return [p]) ]
12
Acties Palindrone met acties. palindrome :: Task (Maybe String)
= enterInformation "Enter a palindrome" [] >>* [ WithResult ActionOk palindrome (\p -> return (Just p)) , Always ActionCancel (return Nothing) ] where palindrome s = lc == reverse lc // nodig omdat array geen reverse kent where lc :: [Char] lc = fromString s
13
Acties Continu monitoren tot een bepaalde conditie geldt raadGetal
= enterInformation "Raad het getal" [] >>* [WhenValid (\a -> a == 23) (\a -> return (a+2)) ,Always ActionCancel (return 42) ]
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.