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
94 pub :: (v t Upd) -> v t Expr | type t
96 (>>=.) infixr 0 :: (v t p) ((v t Expr) -> (v u q)) -> (v u Stmt) | type t & type u
97 (:.) infixr 0 :: (v t p) (v u q) -> v u Stmt | type t & type u
101 (>>*.) infixl 1 :: (v t p) ((v t Expr) -> [Step v u]) -> v u Stmt | type t & type u
102 :: Step v t = E.p.q: Cond (v Bool q) (v t p) | E.p: Ever (v t p)
104 (=.) infixr 2 :: (v t Upd) (v t p) -> v t Expr | type t & isExpr p
106 fun :: ((t->v s Expr)->In (t->v s p) (Main (v u q))) -> Main (v u q) | type s
107 class mtask v a where
108 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
110 lag :: (v delay r) (v t p) -> v MTask Expr | type t & long v delay
111 class setDelay v where
112 setDelay :: (v Long p) (v MTask Expr) -> (v MTask Expr) | isExpr p
113 class mtasks v a b where
114 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
116 output :: (v t p) -> v () Expr | type t & isExpr p
117 class noOp v where noOp :: v t p
119 class pinMode v where
120 pinmode :: p PinMode -> v () Expr | pin p
121 class digitalIO v where
122 digitalRead :: p -> v Bool Expr | pin, readPinD p
123 digitalWrite :: p (v Bool q) -> v Bool Expr | pin, writePinD p
124 class analogIO v where
125 analogRead :: AnalogPin -> v Int Expr
126 analogWrite :: AnalogPin (v Int p) -> v Int Expr
128 dIO :: p -> v Bool Upd | pin, readPinD p
130 aIO :: AnalogPin -> v Int Upd
132 delay :: (v Long p) -> (v Long Expr)
133 millis :: (v Long Expr)
135 class userLed v where
136 ledOn :: (v UserLED q) -> (v () Stmt)
137 ledOff :: (v UserLED q) -> (v () Stmt)
139 class pio p t where pio :: p -> v t Upd | aIO v & dIO v
140 instance pio AnalogPin Int
141 instance pio AnalogPin Bool
142 instance pio DigitalPin Bool
144 int :: (v Int p) -> (v Int p)
145 bool :: (v Bool p) -> (v Bool p)
146 char :: (v Char p) -> (v Char p)
148 class type t | showType, dyn, toCode, ==, type2string, varName t
149 class type2string t :: t -> String
150 instance type2string Int
151 instance type2string Long
152 instance type2string Real
153 instance type2string Bool
154 instance type2string Char
155 instance type2string MTask
156 instance type2string DigitalPin
157 instance type2string AnalogPin
158 instance type2string UserLED
159 instance type2string String
160 instance type2string ()
161 class varName a :: a -> String
163 instance varName Long
164 instance varName Bool
165 instance varName Char
166 instance varName Real
169 class dsl t | arith, boolExpr, sds, assign, seq t
173 class showType2 t :: SV t
174 instance showType2 ()
175 instance showType2 Int
176 instance showType2 Char
177 instance showType2 Bool
180 class showType t | showType2 /*, type*/ t :: (Code t p)
182 instance showType Int
183 instance showType Long
184 instance showType Char
185 instance showType Bool
188 class typeSelector t | showType2, type t :: (Code t p)
189 instance typeSelector Int
190 instance typeSelector Char
191 instance typeSelector Bool
192 instance typeSelector a
194 :: In a b = In infix 0 a b
196 read` :: Int (ReadWrite a) State` -> (a,State`) | dyn a
198 // ----- long ----- //
200 :: Long = L Int // 32 bit on Arduino
209 class long v t :: (v t p) -> v Long Expr | isExpr p
210 instance long Code Int
211 instance long Code Long
212 instance long Eval Int
213 instance long Eval Long
215 // ----- tools ----- //
217 instance == DigitalPin
218 instance == AnalogPin
221 tab =: toString (repeatn tabSize ' ')