1 definition module mTask
4 Pieter Koopman pieter@cs.ru.nl
5 Final version for TFP2016
7 -2: assignment =. suited for digital and analog input and output
11 move task-loop ti setup()
19 //import iTasks._Framework.Generic
20 //from iTasks._Framework.Task import :: Task
22 import GenEq, StdMisc, StdArray
24 import mTaskCode, mTaskSimulation, mTaskInterpret
25 //import mTaskCode, mTaskInterpret
26 import mTaskSerial, mTaskLCD
28 // =================== mTask ===================
31 // ----- dsl definition ----- //
34 = D0 | D1 | D2 | D3 | D4 | D5 |D6 | D7 | D8 | D9 | D10 | D11 | D12 | D13
35 :: AnalogPin = A0 | A1 | A2 | A3 | A4 | A5
36 :: UserLED = LED1 | LED2 | LED3
37 :: PinMode = INPUT | OUTPUT | INPUT_PULLUP
38 :: Pin = Digital DigitalPin | Analog AnalogPin
40 class pin p | type, == p where
42 instance pin DigitalPin
43 instance pin AnalogPin
48 :: MTask = MTask Int // String
50 class isExpr a :: a -> Int
54 class isStmt a :: a -> Int
61 :: Main a = {main :: a}
63 unMain :: (Main x) -> x
66 lit :: t -> v t Expr | toCode t & mTaskType t
67 (+.) infixl 6 :: (v t p) (v t q) -> v t Expr | type, +, zero t & isExpr p & isExpr q //& toExpr2 p & toExpr2 q
68 (-.) infixl 6 :: (v t p) (v t q) -> v t Expr | type, -, zero t & isExpr p & isExpr q //& toExpr2 p & toExpr2 q
69 (*.) infixl 7 :: (v t p) (v t q) -> v t Expr | type, *, zero, one t & isExpr p & isExpr q //& toExpr2 p & toExpr2 q
70 (/.) infixl 7 :: (v t p) (v t q) -> v t Expr | type, /, zero t & isExpr p & isExpr q //& toExpr2 p & toExpr2 q
71 class boolExpr v where
72 (&.) infixr 3 :: (v Bool p) (v Bool q) -> v Bool Expr | isExpr p & isExpr q //& toExpr2 p & toExpr2 q
73 (|.) infixr 2 :: (v Bool p) (v Bool q) -> v Bool Expr | isExpr p & isExpr q //& toExpr2 p & toExpr2 q
74 Not :: (v Bool p) -> v Bool Expr | isExpr p //& toExpr2 p
75 (==.) infix 4 :: (v a p) (v a q) -> v Bool Expr | ==, toCode a & isExpr p & isExpr q //& toExpr2 p & toExpr2 q
76 (!=.) infix 4 :: (v a p) (v a q) -> v Bool Expr | ==, toCode a & isExpr p & isExpr q //& toExpr2 p & toExpr2 q
77 (<.) infix 4 :: (v a p) (v a q) -> v Bool Expr | <, Ord, toCode a & isExpr p & isExpr q //& toExpr2 p & toExpr2 q
78 (>.) infix 4 :: (v a p) (v a q) -> v Bool Expr | <, Ord, toCode a & isExpr p & isExpr q //& toExpr2 p & toExpr2 q
79 (<=.) infix 4 :: (v a p) (v a q) -> v Bool Expr | <, Ord, toCode a & isExpr p & isExpr q //& toExpr2 p & toExpr2 q
80 (>=.) infix 4 :: (v a p) (v a q) -> v Bool Expr | <, Ord, toCode a & isExpr p & isExpr q //& toExpr2 p & toExpr2 q
81 // using functional dependencies
82 class If v q r ~s where
83 If :: (v Bool p) (v t q) (v t r) -> v t s | isExpr p & type t
85 IF :: (v Bool p) (v t q) (v s r) -> v () Stmt | isExpr p
86 (?) infix 1 :: (v Bool p) (v t q) -> v () Stmt | isExpr p
88 var2 :: t ((v t Upd)->(Main (v c s))) -> (Main (v c s)) | type, toCode t
89 con2 :: t ((v t Expr) ->(Main (v c s))) -> (Main (v c s)) | type t
91 sds :: ((v t Upd)->In t (Main (v c s))) -> (Main (v c s)) | type, mTaskType, toCode t
92 con :: ((v t Expr) ->In t (Main (v c s))) -> (Main (v c s)) | type t
93 class namedsds v where
94 namedsds :: ((v t Upd)->In (Named t String) (Main (v c s))) -> (Main (v c s)) | type, mTaskType, toCode t
96 pub :: (v t Upd) -> v t Expr | type t
98 (>>=.) infixr 0 :: (v t p) ((v t Expr) -> (v u q)) -> (v u Stmt) | type t & type u
99 (:.) infixr 0 :: (v t p) (v u q) -> v u Stmt | type t & type u
103 (>>*.) infixl 1 :: (v t p) ((v t Expr) -> [Step v u]) -> v u Stmt | type t & type u
104 :: Step v t = E.p.q: Cond (v Bool q) (v t p) | E.p: Ever (v t p)
106 (=.) infixr 2 :: (v t Upd) (v t p) -> v t Expr | type t & isExpr p
108 fun :: ((t->v s Expr)->In (t->v s p) (Main (v u q))) -> Main (v u q) | type s
109 class mtask v a where
110 task :: (((v delay r) a->v MTask Expr)->In (a->v u p) (Main (v t q))) -> Main (v t q) | type t & type u & isExpr r & long v delay
112 lag :: (v delay r) (v t p) -> v MTask Expr | type t & long v delay
113 class setDelay v where
114 setDelay :: (v Long p) (v MTask Expr) -> (v MTask Expr) | isExpr p
115 class mtasks v a b where
116 tasks :: (((v delay r1) a->v MTask Expr, (v delay r2) b->v MTask Expr)->In (a->v t p, b->v u p) (Main (v s q))) -> Main (v s q) | type s & isExpr r1 & isExpr r2 & long v delay
118 output :: (v t p) -> v () Expr | type t & isExpr p
119 class noOp v where noOp :: v t p
121 class pinMode v where
122 pinmode :: p PinMode -> v () Expr | pin p
123 class digitalIO v where
124 digitalRead :: p -> v Bool Expr | pin, readPinD p
125 digitalWrite :: p (v Bool q) -> v Bool Expr | pin, writePinD p
126 class analogIO v where
127 analogRead :: AnalogPin -> v Int Expr
128 analogWrite :: AnalogPin (v Int p) -> v Int Expr
130 dIO :: p -> v Bool Upd | pin, readPinD p
132 aIO :: AnalogPin -> v Int Upd
134 delay :: (v Long p) -> (v Long Expr)
135 millis :: (v Long Expr)
137 class userLed v where
138 ledOn :: (v UserLED q) -> (v () Stmt)
139 ledOff :: (v UserLED q) -> (v () Stmt)
141 class pio p t where pio :: p -> v t Upd | aIO v & dIO v
142 instance pio AnalogPin Int
143 instance pio AnalogPin Bool
144 instance pio DigitalPin Bool
146 int :: (v Int p) -> (v Int p)
147 bool :: (v Bool p) -> (v Bool p)
148 char :: (v Char p) -> (v Char p)
150 class type t | showType, dyn, toCode, ==, type2string, varName t
151 class type2string t :: t -> String
152 instance type2string Int
153 instance type2string Long
154 instance type2string Real
155 instance type2string Bool
156 instance type2string Char
157 instance type2string MTask
158 instance type2string DigitalPin
159 instance type2string AnalogPin
160 instance type2string UserLED
161 instance type2string String
162 instance type2string ()
163 class varName a :: a -> String
165 instance varName Long
166 instance varName Bool
167 instance varName Char
168 instance varName Real
171 class dsl t | arith, boolExpr, sds, assign, seq t
175 class showType2 t :: SV t
176 instance showType2 ()
177 instance showType2 Int
178 instance showType2 Char
179 instance showType2 Bool
182 class showType t | showType2 /*, type*/ t :: (Code t p)
184 instance showType Int
185 instance showType Long
186 instance showType Char
187 instance showType Bool
190 class typeSelector t | showType2, type t :: (Code t p)
191 instance typeSelector Int
192 instance typeSelector Char
193 instance typeSelector Bool
194 instance typeSelector a
196 :: In a b = In infix 0 a b
197 :: Named a b = Named infix 1 a b
199 read` :: Int (ReadWrite a) State` -> (a,State`) | dyn a
201 // ----- long ----- //
203 :: Long = L Int // 32 bit on Arduino
212 class long v t :: (v t p) -> v Long Expr | isExpr p
213 instance long Code Int
214 instance long Code Long
215 instance long Eval Int
216 instance long Eval Long
218 // ----- tools ----- //
220 instance == DigitalPin
221 instance == AnalogPin
224 tab =: toString (repeatn tabSize ' ')