refactoors
[mTask.git] / mTaskCode.dcl
1 definition module mTaskCode
2
3 import mTask
4
5 class toCode a :: a -> String
6 instance toCode Pin
7 instance toCode MTask
8 instance toCode ()
9 instance toCode Long
10 instance toCode Bool
11 instance toCode Int
12 instance toCode Real
13 instance toCode Char
14 instance toCode String
15 instance toCode DigitalPin
16 instance toCode AnalogPin
17 instance toCode UserLED
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