Sharing
Shared Data Gebruikt voor 3 doelstellingen als resource voor algemeen toegankelijke informatie (tijd, datum, etc) als persistente opslag voor informatie (ook na opnieuw opstarten taak weer aanwezig) om informatie tussen verschillende taken te delen 25-2-2019
Shared Data als resource Data and Time getDateAndTime :: Task DateTime getDateAndTime = get currentDateTime currentDataTime is een shared resource met de get functie haal je de inhoud van de resource op 25-2-2019
Simpel ToDo lijstje toDoList = sharedStore "SimpleToDo" [] toDo :: Task [String] toDo = get toDoList >>= \list -> viewInformation "ToDo List" [] list >>* [Always (Action "Erase all") (eraseAll >>| toDo) ,Always (Action "New Item") (newItem >>| toDo) ,Always (Action "Stop") (return list) ] newItem :: Task Void newItem = enterInformation "New todo" [] >>= \item -> update (\items -> items ++ [item] ) toDoList >>| return Void eraseAll :: Task Void eraseAll = set [] toDoList >>| return Void 25-2-2019
Simpel ToDo lijstje sharedStore naam startwaarde Creeert een store met een naam en initiele waarde. Met get share kan de inhoud worden opgehaald. Met set share waarde kan de waarde in de share worden vervangen. Met update functie share kan de share geupdate worden. 25-2-2019
Extended To-Do lijst :: ToDo = { name :: String , deadline :: Maybe Date , remark :: Maybe Note , done :: Bool } derive class iTask ToDo toDoList :: Shared [ToDo] toDoList = sharedStore "ToDoLijst" [] 25-2-2019
Extended To-Do lijst toDo :: Task String toDo = viewSharedInformation "ToDo List" [] toDoList >>* [Always (Action "Show Ready") (showReady >>| toDo) ,Always (Action "Make changes") (updateToDoList >>| toDo) ,Always (Action "Remove ready") (removeReady >>| toDo) ,Always (Action "New Item") (newItem >>| toDo) ,Always (Action "Stop")(viewInformation "App ready" [] "Gestopt") ] 25-2-2019
Extended To-Do lijst updateToDoList :: Task Void updateToDoList = updateSharedInformation "List" [] toDoList >>| return Void newItem :: Task Void newItem = enterInformation "New todo" [] >>= \item -> update (\items -> items ++ [item]) toDoList >>| return Void 25-2-2019
Extended To-Do lijst removeReady :: Task Void removeReady = update remReady toDoList >>| return Void where remReady tds = [td\\ td <- tds| not td.done] showReady :: Task Void showReady = get toDoList >>= \ts -> viewInformation "Ready" [] [t\\ t <- ts| t.done] >>| return Void 25-2-2019
Twitter App Chat applicatie waar gebruiker kan inloggen en berichten voor bepaalde thread (hashtag) kan volgen en zelf berichten (tweets) kan toevoegen Tweets zijn gegroepeerd per thread Een tweet bestaat uit een paar (username,content) 25-2-2019
Twitter App Start :: *World -> *World Start world = startEngine (tweeting>>= viewInformation "Ready" []) world :: UserName :== String :: Tweet :== (UserName,String) twitterId :: String -> Shared [Tweet] twitterId name = sharedStore ("Twitter with " +++ name) [] tweeting = enterInformation "Give username" [] >>= \me -> enterInformation "Give thread name" [] >>= \name -> joinTweets me name (twitterId name) 25-2-2019
Twitter App joinTweets :: String String (Shared [Tweet]) -> Task Void joinTweets me thread tweetsStore = viewSharedInformation (“Following" +++ thread) [] tweetsStore ||- enterInformation "Add a tweet" [] >>* [ Always (Action "Quit") (return Void) , WithResult (Action "Commit") (const True) commit ] where commit :: String -> Task Void commit message = update (\tws -> tws++ [(me,message)]) tweetsStore >>| joinTweets me thread tweetsStore 25-2-2019
Twitter App ||- doe twee taken parallel en geef het resultaat van de rechtse taak terug 25-2-2019