Finish modulization
[mTask.git] / mTaskCode.dcl
1 definition module mTaskCode
2
3 import mTask
4
5 instance toCode Pin
6 instance toCode MTask
7 instance toCode ()
8 instance toCode Long
9
10 class toCode a :: a -> String
11 instance toCode Bool
12 instance toCode Int
13 instance toCode Real
14 instance toCode Char
15 instance toCode String
16 instance toCode DigitalPin
17 instance toCode AnalogPin
18
19 argType :: (((Code a p)->Code b q)->In ((Code a p)->Code b q) (Code c s)) -> a | type a
20
21 class argTypes t :: ((t->Code b Expr)->In (t->Code b2 q) (Main (Code c s))) -> t
22 instance argTypes (Code a p) | showType a
23 instance argTypes (Code a p, Code b q) | showType a & showType b
24 instance argTypes (Code a p, Code b q, Code c r) | showType a & showType b & showType c
25
26 instance toCode (SV t)
27
28 instance arith Code
29 instance boolExpr Code
30 instance If Code Stmt Stmt Stmt
31 instance If Code e Stmt Stmt
32 instance If Code Stmt e Stmt
33 instance If Code x y Expr
34 instance IF Code
35 instance sds Code
36
37 defCode :: ((Code t p) -> In t (Main (Code u q))) -> Main (Code u r) | type t
38
39 var :: String (ReadWrite (Code v q)) CODE -> CODE
40
41 instance assign Code
42 instance seq Code
43 instance step` Code
44 codeSteps :: [Step Code t] -> Code u p
45 optBreak :: Mode -> Code u p
46
47 instance setDelay Code
48 instance mtask Code a | taskImp2 a & types a
49 instance mtasks Code a b | taskImp2 a & types a & taskImp2 b & types b
50
51 loopCode :: Int (Code a b) -> Code c d
52
53 class taskImp2 a :: Int a -> ((Code Long p) a->Code MTask Expr, a) | /*long Code delay &*/ isExpr p
54 instance taskImp2 ()
55 instance taskImp2 (Code t p)
56 instance taskImp2 (Code a p, Code b q)
57 instance taskImp2 (Code a p, Code b q, Code c r)
58 instance taskImp2 (Code a p, Code b q, Code c r, Code d s)
59
60 class taskImp a :: Int a -> (Int a->Code MTask Expr, a)
61 instance taskImp ()
62 instance taskImp (Code t p)
63 instance taskImp (Code a p, Code b q)
64 instance taskImp (Code a p, Code b q, Code c r)
65 instance taskImp (Code a p, Code b q, Code c r, Code d s)
66
67 tasksMain :: Int Int ((a->Code MTask Expr,b->Code MTask Expr) -> In (a->Code c d,b->Code e f) (Main (Code g h))) -> Main (Code i j) | taskImp a & types a & taskImp b & types b
68 class types a :: a
69 instance types ()
70 instance types (Code a p) | typeSelector a & isExpr p
71 instance types (Code a p, Code b q) | typeSelector a & isExpr p & typeSelector b & isExpr q
72 instance types (Code a p, Code b q, Code c r) | typeSelector a & isExpr p & typeSelector b & isExpr q & typeSelector c & isExpr r
73 instance types (Code a p, Code b q, Code c r, Code d s) | typeSelector a & isExpr p & typeSelector b & isExpr q & typeSelector c & isExpr r & typeSelector d & isExpr s
74
75 codeMTaskBody :: (Code v w) (Code c d) -> Code e f
76 instance fun Code ()
77 instance fun Code (Code t p) | type, showType t & isExpr p
78 instance fun Code (Code a p, Code b q) | showType a & showType b
79 instance fun Code (Code a p, Code b q, Code c r) | showType a & showType b & showType c
80 instance output Code
81 instance pinMode Code
82 instance digitalIO Code
83 instance dIO Code
84 instance aIO Code
85 instance analogIO Code
86 instance noOp Code
87
88 :: Code a p = C ((ReadWrite (Code a Expr)) CODE -> CODE)
89 :: CODE =
90 { fresh :: Int
91 , freshMTask :: Int
92 , funs :: [String]
93 , ifuns :: Int
94 , vars :: [String]
95 , ivars :: Int
96 , setup :: [String]
97 , isetup :: Int
98 , loop :: [String]
99 , iloop :: Int
100 , includes :: [String]
101 , def :: Def
102 , mode :: Mode
103 , binds :: [String]
104 }
105
106 unC :: (Code a p) -> ((ReadWrite (Code a Expr)) CODE -> CODE)
107
108 :: Def = Var | Fun | Setup | Loop
109 :: Mode = /*MainMode |*/ NoReturn | Return String | SubExp | Assign String
110
111 setMode :: Mode -> Code a p
112 getMode :: (Mode -> Code a p) -> Code a p
113 embed :: (Code a p) -> Code a p
114 (+.+) infixl 5 :: (Code a p) (Code b q) -> Code c r
115 fresh :: (Int -> (Code a p)) -> (Code a p)
116 freshMTask :: (Int -> (Code a p)) -> (Code a p)
117 setCode :: Def -> (Code a p)
118 getCode :: (Def -> Code a p) -> (Code a p)
119 brac :: (Code a p) -> Code b q
120 funBody :: (Code a p) -> Code b q
121 codeOp2 :: (Code a p) String (Code b q) -> Code c r
122 include :: String -> Code a b
123 argList :: [a] -> String | toCode a
124 c :: a -> Code b p | toCode a
125 indent :: Code a p
126 unindent :: Code a p
127 nl :: Code a p
128 setBinds :: [String] -> Code a p
129 addBinds :: String -> Code a p
130 getBinds :: ([String] -> Code a p) -> (Code a p)
131
132 // ----- driver ----- //
133
134 compile :: (Main (Code a p)) -> [String]
135 mkset :: [a] -> [a] | Eq a
136 newCode :: CODE