1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
module skeleton8
/**
* Advanved Progrmming 2017, Assignment 8
* Pieter Koopman, pieter@cs.ru.nl
*/
from iTasks import class iTask, class toPrompt, class Publishable, instance Publishable Task,
instance toPrompt String, instance Functor Task,
class TApplicative, instance TApplicative Task,
generic gEq, generic gDefault, generic JSONDecode, generic JSONEncode, generic gText, generic gEditor,
:: JSONNode, :: TextFormat, :: Editor, :: TaskValue(..), :: Stability, :: Task, :: Action,
:: TaskCont(..), :: ViewOption(..), :: UpdateOption(..),
-||-, -||, ||-, >>*, always, hasValue, updateInformation, viewInformation, startEngine
import qualified iTasks
import qualified iTasks.WF.Combinators.Overloaded as WF
import Data.Functor, Control.Applicative, Control.Monad
import Data.Tuple, StdClass, StdList, StdMaybe, StdString
import StdGeneric, StdBool
from StdFunc import o
import qualified Data.List as List
import qualified Data.Map as Map
:: Expression
= New [Int]
| Elem Int
| Variable Ident
| Size Set
| (+.) infixl 6 Expression Expression
| (-.) infixl 6 Expression Expression
| (*.) infixl 7 Expression Expression
| (=.) infixl 2 Ident Expression
:: Logical
= TRUE | FALSE
| (In) infix 4 Elem Set
| (==.) infix 4 Expression Expression
| (<=.) infix 4 Expression Expression
| Not Logical
| (||.) infixr 2 Logical Logical
| (&&.) infixr 3 Logical Logical
:: Stmt
= If Logical Stmt Stmt
| For Ident Set Stmt
| Expression Expression
| Logical Logical
:: Set :== Expression
:: Elem :== Expression
:: Ident :== String
// === State
// === semantics
// === simulation
(>>>=) :== 'iTasks'.tbind
(>>>|) a b :== 'iTasks'.tbind a (\_ -> b)
treturn :== 'iTasks'.return
ActionOk :== 'iTasks'.ActionOk
ActionQuit :== 'iTasks'.ActionQuit
ActionNew :== 'iTasks'.ActionNew
Start = ()
|