a521168938aa07a39bd60a40a649010fe470a899
[ap2015.git] / a4 / mart / skeleton4.icl
1 module skeleton4
2
3 /*
4 Advanced Programming.
5 Skeleton for assignment 4.
6 To be used in a project with the environment iTasks.
7 Pieter Koopman, pieter@cs.ru.nl
8 */
9
10 import iTasks
11 import StdArray // To check string length
12
13 :: Idea:== String
14 :: Name:== String
15
16 :: NamedIdea = { name :: Name, idea :: [Idea]}
17 derive class iTask NamedIdea // generic magic
18
19 doIdentified :: (Name -> Task x) -> Task x | iTask x
20 doIdentified task = enterInformation "Enter your name" [] >>= task
21
22 editIdea :: Name -> Task NamedIdea
23 editIdea name = enterInformation (name +++ " add your ideas") []
24 >>= \idea . return {name = name, idea = idea}
25
26 mainTask = doIdentified editIdea >>= viewInformation "The result" [
27 ViewWith (\x=:{name,idea}.{x & idea=[name:fideas idea]})]
28 where
29 //Format the indices and the ideas
30 fideas i = map (\(x,y).toString (x+1) +++ ": " +++ y) (filt i)
31 //Filter the ideas on length and add indices
32 filt i = zip2 (indexList i) (filter (\x.size x > 10) i)
33
34 Start :: *World -> *World
35 Start world = startEngine mainTask world