X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=mTaskSimulation.icl;h=6fed0842fcc164b0c2459571d06dd73031717ccb;hb=7a67ef5e2af69cb14011be201fe67f755b91a788;hp=3a94811a26865afa3c51f9e55d2579843be66744;hpb=dd0896b855fc81e10b45b9407fead457a027f645;p=mTask.git diff --git a/mTaskSimulation.icl b/mTaskSimulation.icl index 3a94811..6fed084 100644 --- a/mTaskSimulation.icl +++ b/mTaskSimulation.icl @@ -7,8 +7,8 @@ import mTask 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)] @@ -16,15 +16,15 @@ eval {main=(E f)} = [toString (fst (f Rd zero))] , 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) @@ -126,7 +126,7 @@ readPinA p lista [] = 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]]} @@ -141,7 +141,7 @@ instance readPinD AnalogPin where = 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 @@ -172,7 +172,7 @@ simulate {main=(E f)} = setup zero where ] ] -toView :: State -> StateInterface +toView :: State` -> StateInterface toView s = { serialOut = Display s.serial , analogPins = s.apins @@ -182,7 +182,7 @@ toView s = , 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] @@ -229,7 +229,7 @@ fromDisplayVar (DisplayVar l) dyn = Dyn l | 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]