1 definition module mTaskSimulation
5 from Generics.gdynamic import :: Dyn, class dyn, generic toGenDynamic, generic fromGenDynamic
6 from GenPrint import class PrintOutput, :: PrintState
7 from Data.Maybe import :: Maybe
8 from iTasks import class iTask, generic gEditor, generic gDefault, generic gText, generic JSONEncode, generic JSONDecode, :: Task, :: Editor, :: JSONNode, :: TextFormat
10 :: Display a = Display a
12 derive class iTask Display
14 eval :: (Main (Eval t p)) -> [String] | toString t
16 { tasks :: [(Int, State`->State`)]
18 , dpins :: [(DigitalPin, Bool)]
19 , apins :: [(AnalogPin, Int)]
24 //:: TaskSim :== (Int, State`->State`)
25 :: Eval t p = E ((ReadWrite t) State` -> (t, State`))
26 toS2S :: (Eval t p) -> (State`->State`)
28 unEval :: (Eval t p) -> ((ReadWrite t) State` -> (t, State`))
30 :: ReadWrite t = Rd | Wrt t | Updt (t->t)
32 (>>==) infixl 1 :: (Eval a p) (a -> Eval b q) -> Eval b r
33 //(>>== ) (E f) g = E \r s. let (a, s2) = f Rd s; (E h) = g a in h Rd s2
37 yield :: t (Eval s p) -> Eval t Expr
38 //yield a (E f) = E (\r s.(\(_,t).(a,t)) (f r s))
41 instance boolExpr Eval
42 instance If Eval p q Expr
46 defEval2 :: t ((Eval t p)->Main (Eval u q)) -> (Main (Eval u q)) | dyn t
49 defEval :: ((Eval t p)->In t (Main (Eval u q))) -> (Main (Eval u q)) | dyn t
50 instance fun Eval x | arg x
51 instance mtask Eval x | arg x
52 instance mtasks Eval x y | arg x & arg y
53 instance setDelay Eval
55 class toExpr v where toExpr :: (v t p) -> v t Expr
62 instance digitalIO Eval
63 instance analogIO Eval
66 class arg x :: x -> Int
68 instance arg (Eval t p) | type t
69 instance arg (Eval t p, Eval u q) | type t & type u
70 instance arg (Eval t p, Eval u q, Eval v r) | type t & type u & type v
71 instance arg (Eval t p, Eval u q, Eval v r, Eval w s) | type t & type u & type v
75 readPinA :: AnalogPin [(AnalogPin, Int)] -> Int
76 writePinA :: AnalogPin Int State` -> State`
78 class readPinD p :: p [(DigitalPin,Bool)] [(AnalogPin,Int)] -> Bool
79 instance readPinD DigitalPin
80 instance readPinD AnalogPin
82 class writePinD p :: p Bool State` -> State`
83 instance writePinD DigitalPin
84 instance writePinD AnalogPin
86 // ----- Interactive Simulation ----- //
88 simulate :: (Main (Eval a p)) -> Task ()
89 toView :: State` -> StateInterface
90 mergeView :: State` StateInterface -> State`
92 { serialOut :: Display [String]
93 , analogPins :: [(AnalogPin, Int)]
94 , digitalPins :: [(DigitalPin, Bool)]
95 , var2iables :: [DisplayVar]
97 , taskCount :: Display Int
100 toDisplayVar :: Dyn -> DisplayVar
101 fromDisplayVar :: DisplayVar Dyn -> Dyn
107 | LCD16x2 String String
108 | DisplayVar [String]
110 step` :: State` -> State`
112 class stringQuotes t | type t :: (Code t p) -> Code t p
113 instance stringQuotes String
114 instance stringQuotes t
116 derive toGenDynamic (), MTask, DigitalPin, AnalogPin, Pin, [], Long, UserLED //, Servo
117 derive fromGenDynamic (), MTask, DigitalPin, AnalogPin, Pin, [], Long, UserLED //, Servo