1 definition module mTaskSimulation
3 import iTasks.API.Core.Types
6 :: Display a = Display a
8 derive class iTask Display
10 eval :: (Main (Eval t p)) -> [String] | toString t
12 { tasks :: [(Int, State`->State`)]
14 , dpins :: [(DigitalPin, Bool)]
15 , apins :: [(AnalogPin, Int)]
20 //:: TaskSim :== (Int, State`->State`)
21 :: Eval t p = E ((ReadWrite t) State` -> (t, State`))
22 toS2S :: (Eval t p) -> (State`->State`)
24 unEval :: (Eval t p) -> ((ReadWrite t) State` -> (t, State`))
26 :: ReadWrite t = Rd | Wrt t | Updt (t->t)
28 (>>==) infixl 1 :: (Eval a p) (a -> Eval b q) -> Eval b r
29 //(>>== ) (E f) g = E \r s. let (a, s2) = f Rd s; (E h) = g a in h Rd s2
33 yield :: t (Eval s p) -> Eval t Expr
34 //yield a (E f) = E (\r s.(\(_,t).(a,t)) (f r s))
37 instance boolExpr Eval
38 instance If Eval p q Expr
42 defEval2 :: t ((Eval t p)->Main (Eval u q)) -> (Main (Eval u q)) | dyn t
45 defEval :: ((Eval t p)->In t (Main (Eval u q))) -> (Main (Eval u q)) | dyn t
46 instance fun Eval x | arg x
47 instance mtask Eval x | arg x
48 instance mtasks Eval x y | arg x & arg y
49 instance setDelay Eval
51 class toExpr v where toExpr :: (v t p) -> v t Expr
58 instance digitalIO Eval
59 instance analogIO Eval
62 class arg x :: x -> Int
64 instance arg (Eval t p) | type t
65 instance arg (Eval t p, Eval u q) | type t & type u
66 instance arg (Eval t p, Eval u q, Eval v r) | type t & type u & type v
67 instance arg (Eval t p, Eval u q, Eval v r, Eval w s) | type t & type u & type v
71 readPinA :: AnalogPin [(AnalogPin, Int)] -> Int
72 writePinA :: AnalogPin Int State` -> State`
74 class readPinD p :: p [(DigitalPin,Bool)] [(AnalogPin,Int)] -> Bool
75 instance readPinD DigitalPin
76 instance readPinD AnalogPin
78 class writePinD p :: p Bool State` -> State`
79 instance writePinD DigitalPin
80 instance writePinD AnalogPin
82 // ----- Interactive Simulation ----- //
84 derive class iTask DigitalPin, AnalogPin, Dyn, StateInterface, DisplayVar, Pin
86 simulate :: (Main (Eval a p)) -> Task ()
87 toView :: State` -> StateInterface
88 mergeView :: State` StateInterface -> State`
90 { serialOut :: Display [String]
91 , analogPins :: [(AnalogPin, Int)]
92 , digitalPins :: [(DigitalPin, Bool)]
93 , var2iables :: [DisplayVar]
95 , taskCount :: Display Int
98 toDisplayVar :: Dyn -> DisplayVar
99 fromDisplayVar :: DisplayVar Dyn -> Dyn
105 | LCD16x2 String String
106 | DisplayVar [String]
108 step` :: State` -> State`
110 class stringQuotes t | type t :: (Code t p) -> Code t p
111 instance stringQuotes String
112 instance stringQuotes t
114 derive toGenDynamic (), MTask, DigitalPin, AnalogPin, Pin, [], Long //, Servo
115 derive fromGenDynamic (), MTask, DigitalPin, AnalogPin, Pin, [], Long //, Servo