1 definition module mTaskInterpret
3 from Data.Functor.Identity import :: Identity
4 from Control.Monad.State import :: State, :: StateT
27 //Conditionals and jumping
39 | BCAnalogWrite String
40 | BCDigitalRead String
41 | BCDigitalWrite String
44 //:: ByteCode a p = BC (BCState -> ([BC], BCState))
45 :: ByteCode a p = BC [BC]
46 //:: ByteCode a p = BC ((ReadWrite (ByteCode a Expr)) BCState -> ([BC], BCState))
51 toByteVal :: BC -> String
52 toReadableByteVal :: BC -> String
55 //instance toCode MTask
57 //instance toCode Long
59 //class toCode a :: a -> String
60 //instance toCode Bool
62 //instance toCode Real
63 //instance toCode Char
64 //instance toCode String
65 //instance toCode DigitalPin
66 //instance toCode AnalogPin
68 //argType :: (((Code a p)->Code b q)->In ((Code a p)->Code b q) (Code c s)) -> a | type a
70 //class argTypes t :: ((t->Code b Expr)->In (t->Code b2 q) (Main (Code c s))) -> t
71 //instance argTypes (Code a p) | showType a
72 //instance argTypes (Code a p, Code b q) | showType a & showType b
73 //instance argTypes (Code a p, Code b q, Code c r) | showType a & showType b & showType c
75 //instance toCode (SV t)
78 //instance boolExpr Code
79 //instance If Code Stmt Stmt Stmt
80 //instance If Code e Stmt Stmt
81 //instance If Code Stmt e Stmt
82 //instance If Code x y Expr
86 //defCode :: ((Code t p) -> In t (Main (Code u q))) -> Main (Code u r) | type t
88 //var :: String (ReadWrite (Code v q)) CODE -> CODE
90 //instance assign Code
93 //codeSteps :: [Step Code t] -> Code u p
94 //optBreak :: Mode -> Code u p
96 //instance setDelay Code
97 //instance mtask Code a | taskImp2 a & types a
98 //instance mtasks Code a b | taskImp2 a & types a & taskImp2 b & types b
100 //loopCode :: Int (Code a b) -> Code c d
102 //class taskImp2 a :: Int a -> ((Code Long p) a->Code MTask Expr, a) | /*long Code delay &*/ isExpr p
103 //instance taskImp2 ()
104 //instance taskImp2 (Code t p)
105 //instance taskImp2 (Code a p, Code b q)
106 //instance taskImp2 (Code a p, Code b q, Code c r)
107 //instance taskImp2 (Code a p, Code b q, Code c r, Code d s)
109 //class taskImp a :: Int a -> (Int a->Code MTask Expr, a)
110 //instance taskImp ()
111 //instance taskImp (Code t p)
112 //instance taskImp (Code a p, Code b q)
113 //instance taskImp (Code a p, Code b q, Code c r)
114 //instance taskImp (Code a p, Code b q, Code c r, Code d s)
116 //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
119 //instance types (Code a p) | typeSelector a & isExpr p
120 //instance types (Code a p, Code b q) | typeSelector a & isExpr p & typeSelector b & isExpr q
121 //instance types (Code a p, Code b q, Code c r) | typeSelector a & isExpr p & typeSelector b & isExpr q & typeSelector c & isExpr r
122 //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
124 //codeMTaskBody :: (Code v w) (Code c d) -> Code e f
125 //instance fun Code ()
126 //instance fun Code (Code t p) | type, showType t & isExpr p
127 //instance fun Code (Code a p, Code b q) | showType a & showType b
128 //instance fun Code (Code a p, Code b q, Code c r) | showType a & showType b & showType c
129 //instance output Code
130 //instance pinMode Code
131 //instance digitalIO Code
134 //instance analogIO Code
137 //:: Code a p = C ((ReadWrite (Code a Expr)) CODE -> CODE)
140 // , freshMTask :: Int
141 // , funs :: [String]
143 // , vars :: [String]
145 // , setup :: [String]
147 // , loop :: [String]
149 // , includes :: [String]
152 // , binds :: [String]
155 //unC :: (Code a p) -> ((ReadWrite (Code a Expr)) CODE -> CODE)
157 //:: Def = Var | Fun | Setup | Loop
158 //:: Mode = /*MainMode |*/ NoReturn | Return String | SubExp | Assign String
160 //setMode :: Mode -> Code a p
161 //getMode :: (Mode -> Code a p) -> Code a p
162 //embed :: (Code a p) -> Code a p
163 //(+.+) infixl 5 :: (Code a p) (Code b q) -> Code c r
164 //fresh :: (Int -> (Code a p)) -> (Code a p)
165 //freshMTask :: (Int -> (Code a p)) -> (Code a p)
166 //setCode :: Def -> (Code a p)
167 //getCode :: (Def -> Code a p) -> (Code a p)
168 //brac :: (Code a p) -> Code b q
169 //funBody :: (Code a p) -> Code b q
170 //codeOp2 :: (Code a p) String (Code b q) -> Code c r
171 //include :: String -> Code a b
172 //argList :: [a] -> String | toCode a
173 //c :: a -> Code b p | toCode a
175 //unindent :: Code a p
177 //setBinds :: [String] -> Code a p
178 //addBinds :: String -> Code a p
179 //getBinds :: ([String] -> Code a p) -> (Code a p)
181 //// ----- driver ----- //
183 //compile :: (Main (Code a p)) -> [String]
184 //mkset :: [a] -> [a] | Eq a