5 Skeleton for assignment 4.
6 To be used in a project with the environment iTasks.
7 Pieter Koopman, pieter@cs.ru.nl
13 :: Idea = { title :: String, desc :: Maybe Note }
16 :: FullIdea = { user :: Name, number :: Int, idea :: Idea}
17 :: RawIdea = {data :: FullIdea}
19 :: NamedIdea = { name :: Name, ideas :: [Idea]}
20 derive class iTask NamedIdea // generic magic
21 derive class iTask Idea
22 derive class iTask FullIdea
23 derive class iTask RawIdea
25 doIdentified :: (Name -> Task x) -> Task x | iTask x
27 = enterInformation "Enter your name" []
30 editIdea :: Name -> Task (Name, [Idea])
32 = enterInformation (name +++ " add your idea") []
33 >>= \val . return (name, val)
35 buildOutput :: (Name, [Idea]) -> Task [RawIdea]
36 buildOutput (name, ideas) = return (buildIdeas name 1 ideas)
38 mainTask = doIdentified editIdea
40 >>= viewInformation "The result" [ViewWith filterIdeas]
42 buildIdeas :: Name Int [Idea] -> [RawIdea]
43 buildIdeas _ _ [] = []
44 buildIdeas usr nr [i:xs] = [{data = {user = usr, number = nr, idea = i}} : buildIdeas usr (nr+1) xs]
46 filterIdeas :: [RawIdea] -> [FullIdea]
47 filterIdeas [{data = idea=:{idea = {desc = Nothing}}}:xs] = filterIdeas xs
48 filterIdeas [{data = idea=:{idea = {desc = Just d}}}:xs] | size (toString d) > 10 = [idea:filterIdeas xs]
49 | otherwise = filterIdeas xs
52 Start :: *World -> *World
53 Start world = startEngine mainTask world