1 definition module mTaskSimulation
3 import iTasks.API.Core.Types
6 //:: Display a = Display a
8 //derive class iTask Display
11 eval :: (Main (Eval t p)) -> [String] | toString t
13 { tasks :: [(Int, State`->State`)]
15 , dpins :: [(DigitalPin, Bool)]
16 , apins :: [(AnalogPin, Int)]
21 //:: TaskSim :== (Int, State`->State`)
22 :: Eval t p = E ((ReadWrite t) State` -> (t, State`))
23 toS2S :: (Eval t p) -> (State`->State`)
25 unEval :: (Eval t p) -> ((ReadWrite t) State` -> (t, State`))
27 :: ReadWrite t = Rd | Wrt t | Updt (t->t)
29 (>>==) infixl 1 :: (Eval a p) (a -> Eval b q) -> Eval b r
30 //(>>== ) (E f) g = E \r s. let (a, s2) = f Rd s; (E h) = g a in h Rd s2
34 yield :: t (Eval s p) -> Eval t Expr
35 //yield a (E f) = E (\r s.(\(_,t).(a,t)) (f r s))
38 instance boolExpr Eval
39 instance If Eval p q Expr
43 defEval2 :: t ((Eval t p)->Main (Eval u q)) -> (Main (Eval u q)) | dyn t
46 defEval :: ((Eval t p)->In t (Main (Eval u q))) -> (Main (Eval u q)) | dyn t
47 instance fun Eval x | arg x
48 instance mtask Eval x | arg x
49 instance mtasks Eval x y | arg x & arg y
50 instance setDelay Eval
52 class toExpr v where toExpr :: (v t p) -> v t Expr
59 instance digitalIO Eval
60 instance analogIO Eval
63 class arg x :: x -> Int
65 instance arg (Eval t p) | type t
66 instance arg (Eval t p, Eval u q) | type t & type u
67 instance arg (Eval t p, Eval u q, Eval v r) | type t & type u & type v
68 instance arg (Eval t p, Eval u q, Eval v r, Eval w s) | type t & type u & type v
72 readPinA :: AnalogPin [(AnalogPin, Int)] -> Int
73 writePinA :: AnalogPin Int State` -> State`
75 class readPinD p :: p [(DigitalPin,Bool)] [(AnalogPin,Int)] -> Bool
76 instance readPinD DigitalPin
77 instance readPinD AnalogPin
79 class writePinD p :: p Bool State` -> State`
80 instance writePinD DigitalPin
81 instance writePinD AnalogPin
83 // ----- Interactive Simulation ----- //
85 derive class iTask DigitalPin, AnalogPin, Dyn, StateInterface, DisplayVar, Pin
87 simulate :: (Main (Eval a p)) -> Task ()
88 toView :: State` -> StateInterface
89 mergeView :: State` StateInterface -> State`
91 { serialOut :: Display [String]
92 , analogPins :: [(AnalogPin, Int)]
93 , digitalPins :: [(DigitalPin, Bool)]
94 , var2iables :: [DisplayVar]
96 , taskCount :: Display Int
99 toDisplayVar :: Dyn -> DisplayVar
100 fromDisplayVar :: DisplayVar Dyn -> Dyn
106 | LCD16x2 String String
107 | DisplayVar [String]
109 step` :: State` -> State`
111 class stringQuotes t | type t :: (Code t p) -> Code t p
112 instance stringQuotes String
113 instance stringQuotes t
115 derive toGenDynamic (), MTask, DigitalPin, AnalogPin, Pin, [], Long //, Servo
116 derive fromGenDynamic (), MTask, DigitalPin, AnalogPin, Pin, [], Long //, Servo