7d9ca626fa1a8c25525f0bc88435d4893ae3a1b2
[ap2015.git] / a5 / mart / a5.icl
1 module a5
2
3 /*
4 Mart Lubbers s4109503
5 Charlie Gerhardus s3050009
6 */
7
8 import iTasks
9 import Text // To check string length
10
11 :: Idea = {idea :: String, details :: Maybe Note, user :: Name, number :: Int}
12 :: ProtoIdea = {idea :: String, details :: Maybe Note}
13 :: Name:== String
14
15 derive class iTask Idea, ProtoIdea // generic magic
16
17 ideas :: Shared [Idea]
18 ideas = sharedStore "Ideas" []
19
20 addNewIdea :: Task [Idea]
21 addNewIdea = enterInformation "New idea" [EnterWith ideaLens]
22 >>* [OnAction ActionOk (hasValue (\v -> return v))]
23 >>= \n.upd (\is.[n:is]) ideas
24 where
25 ideaLens :: ProtoIdea -> Idea
26 ideaLens p = {idea=p.idea, user="Mart", number=42}
27
28 mainTask = forever (
29 addNewIdea
30 -||
31 enterChoiceWithShared "Idea" [] ideas
32 )
33
34
35 Start :: *World -> *World
36 Start world = startEngine mainTask world