eval :: (Main (Eval t p)) -> [String] | toString t
eval {main=(E f)} = [toString (fst (f Rd zero))]
-:: State =
- { tasks :: [(Int, State->State)]
+:: State` =
+ { tasks :: [(Int, State`->State`)]
, store :: [Dyn]
, dpins :: [(DigitalPin, Bool)]
, apins :: [(AnalogPin, Int)]
, millis:: Int
}
-instance zero State where
+instance zero State` where
zero = {store = [], tasks = [], serial = [], millis = 0, dpins = [] , apins = []}
-//:: TaskSim :== (Int, State->State)
-:: Eval t p = E ((ReadWrite t) State -> (t, State))
-toS2S :: (Eval t p) -> (State->State)
+//:: TaskSim :== (Int, State`->State`)
+:: Eval t p = E ((ReadWrite t) State` -> (t, State`))
+toS2S :: (Eval t p) -> (State`->State`)
toS2S (E f) = \state.snd (f Rd state)
-unEval :: (Eval t p) -> ((ReadWrite t) State -> (t, State))
+unEval :: (Eval t p) -> ((ReadWrite t) State` -> (t, State`))
unEval (E f) = f
:: ReadWrite t = Rd | Wrt t | Updt (t->t)
[] = 0
[a:x] = a
-writePinA :: AnalogPin Int State -> State
+writePinA :: AnalogPin Int State` -> State`
writePinA p x s
= {s & apins = [(p, x):[(q, y) \\ (q, y) <- s.apins | p <> q]]}
= case [b \\ (q,b) <- lista | p == q] of
[] = False
[a:x] = a <> 0
-class writePinD p :: p Bool State -> State
+class writePinD p :: p Bool State` -> State`
instance writePinD DigitalPin where
writePinD p b s=:{dpins} = {s & dpins = [(p, b):[(q, c) \\ (q, c) <- dpins | p <> q]]}
instance writePinD AnalogPin where
]
]
-toView :: State -> StateInterface
+toView :: State` -> StateInterface
toView s =
{ serialOut = Display s.serial
, analogPins = s.apins
, taskCount = Display (length s.tasks)
}
-mergeView :: State StateInterface -> State
+mergeView :: State` StateInterface -> State`
mergeView s si =
{ s
& store = [fromDisplayVar new old \\ new <- si.var2iables & old <- s.store]
| DisplayVar [String]
-step` :: State -> State
+step` :: State` -> State`
step` s =
foldr appTask {s & millis = s.millis + delta, tasks = []}
[(w - delta, f) \\ (w, f) <- s.tasks]