module skeleton4 /* Advanced Programming. Skeleton for assignment 4. To be used in a project with the environment iTasks. Pieter Koopman, pieter@cs.ru.nl */ import StdArray import iTasks :: Idea = { title :: String, desc :: Maybe Note } :: Name :== String :: FullIdea = { user :: Name, number :: Int, idea :: Idea} :: RawIdea = {data :: FullIdea} :: NamedIdea = { name :: Name, ideas :: [Idea]} derive class iTask NamedIdea // generic magic derive class iTask Idea derive class iTask FullIdea derive class iTask RawIdea doIdentified :: (Name -> Task x) -> Task x | iTask x doIdentified task = enterInformation "Enter your name" [] >>= task editIdea :: Name -> Task (Name, [Idea]) editIdea name = enterInformation (name +++ " add your idea") [] >>= \val . return (name, val) buildOutput :: (Name, [Idea]) -> Task [RawIdea] buildOutput (name, ideas) = return (buildIdeas name 1 ideas) mainTask = doIdentified editIdea >>= buildOutput >>= viewInformation "The result" [ViewWith filterIdeas] buildIdeas :: Name Int [Idea] -> [RawIdea] buildIdeas _ _ [] = [] buildIdeas usr nr [i:xs] = [{data = {user = usr, number = nr, idea = i}} : buildIdeas usr (nr+1) xs] filterIdeas :: [RawIdea] -> [FullIdea] filterIdeas [{data = idea=:{idea = {desc = Nothing}}}:xs] = filterIdeas xs filterIdeas [{data = idea=:{idea = {desc = Just d}}}:xs] | size (toString d) > 10 = [idea:filterIdeas xs] | otherwise = filterIdeas xs filterIdeas [] = [] Start :: *World -> *World Start world = startEngine mainTask world